diff --git a/SciPost_v1/settings/staging_release.py b/SciPost_v1/settings/staging_release.py index a9290b92b0524e7a61c13d6322275fcd9d6dfe4f..6d8b1fed0ff69b3321cbbdbb96e0b8589aa8865d 100644 --- a/SciPost_v1/settings/staging_release.py +++ b/SciPost_v1/settings/staging_release.py @@ -20,5 +20,7 @@ MEDIA_ROOT = '/home/jdewit/webapps/scipost_media/' WEBPACK_LOADER['DEFAULT']['CACHE'] = True WEBPACK_LOADER['DEFAULT']['BUNDLE_DIR_NAME'] = '/home/jdewit/webapps/scipost_static/bundles/' -# Error reporting -ADMINS = MANAGERS = (('J. de Wit', 'jorrandewit@outlook.com'), ) + +# Logging +LOGGING['handlers']['scipost_file_arxiv']['filename'] = '/home/jdewit/webapps/scipost/logs/arxiv.log' +LOGGING['handlers']['scipost_file_doi']['filename'] = '/home/jdewit/webapps/scipost/logs/doi.log' diff --git a/scipost/managers.py b/scipost/managers.py index b62ac59bb7cfdf7faa5990ed6afa2f20b55e812b..b16b82034b11303f60ffa2074a90b55b3a51b86a 100644 --- a/scipost/managers.py +++ b/scipost/managers.py @@ -52,6 +52,9 @@ class UnavailabilityPeriodManager(models.Manager): def today(self): return self.filter(start__lte=today, end__gte=today) + def future(self): + return self.filter(end__gte=today) + class AuthorshipClaimQuerySet(models.QuerySet): def awaiting_vetting(self): diff --git a/scipost/static/scipost/assets/css/_nav.scss b/scipost/static/scipost/assets/css/_nav.scss index 974bcde176520b2f82900249c0c8a030a514c39e..d33cb87ddac8b2f23a73f83970814fe8d1764fca 100644 --- a/scipost/static/scipost/assets/css/_nav.scss +++ b/scipost/static/scipost/assets/css/_nav.scss @@ -71,3 +71,8 @@ nav.main-nav { .nav { flex-wrap: nowrap; } + +.tab-pane .loading { + text-align: center; + padding: 3rem; +} diff --git a/scipost/static/scipost/assets/js/dynamic_loading.js b/scipost/static/scipost/assets/js/dynamic_loading.js new file mode 100644 index 0000000000000000000000000000000000000000..5064be98fb68d318671d523bd3694ce75d0efb3c --- /dev/null +++ b/scipost/static/scipost/assets/js/dynamic_loading.js @@ -0,0 +1,54 @@ +function dynamic_load_tab( target_tab ) { + var tab = $(target_tab); + var url = tab.attr('sp-dynamic-load'); + if(tab.data('sp-loaded') == 'true') { + // window.history.replaceState('scipost', document.title, url); + return; // Only load once + } + + var target = $(tab.attr('href')); + $(target) + .show() + .html('<div class="loading"><i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i></div>'); + + $.get(url).done(function(data) { + $(target).html(data).promise().done(function() { + tab.data('sp-loaded', 'true'); + }); + + // window.history.replaceState('scipost', document.title, url); + }); +} + +$(function(){ + // Change `tab` GET parameter for page-reload + $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { + dynamic_load_tab( e.target ) + }) + $('[data-toggle="tab"][sp-autoload="true"]').tab('show'); + + // Simple simple Angular-like loading! + $('a[data-toggle="dynamic"]').on('click', function(event) { + event.preventDefault(); + var self = this, + url = $(this).attr('href'), + target = $(this).attr('data-target'); + + $(target) + .show() + .html('<div class="loading"><i class="fa fa-circle-o-notch fa-spin fa-3x fa-fw"></i></div>'); + + $.get(url + '?json=1').done(function(data) { + $(target).html(data).promise().done(function() { + init_page(); + }); + $('[data-target="active-list"]') + .find('> li') + .removeClass('active') + $(self).parents('[data-target="active-list"] > li') + .addClass('active'); + + window.history.replaceState('scipost', document.title, url); + }); + }); +}); diff --git a/scipost/static/scipost/assets/js/scripts.js b/scipost/static/scipost/assets/js/scripts.js index 62d164fb742284d5822e5663d37e7cab1e401187..4e96974ec3df7596e5d8cdc9f2fbafa8daedad99 100644 --- a/scipost/static/scipost/assets/js/scripts.js +++ b/scipost/static/scipost/assets/js/scripts.js @@ -59,12 +59,6 @@ $(function(){ // Remove all alerts in screen automatically after 15sec. setTimeout(function() {hide_all_alerts()}, 15000); - // Change `tab` GET parameter for page-reload - $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { - var tab_name = e.target.hash.substring(1) - window.history.replaceState({}, null, '?tab=' + tab_name); - }); - init_page(); // Simple simple Angular-like loading! diff --git a/scipost/templates/partials/scipost/personal_page/account.html b/scipost/templates/partials/scipost/personal_page/account.html new file mode 100644 index 0000000000000000000000000000000000000000..bcb731d9b2bb8a84ff3b75b0403485f9c52db829 --- /dev/null +++ b/scipost/templates/partials/scipost/personal_page/account.html @@ -0,0 +1,184 @@ +{% load bootstrap %} +{% load user_groups %} + +{# Save all Permission groups into template variables #} + {% is_edcol_admin request.user as is_edcol_admin %} + {% is_scipost_admin request.user as is_scipost_admin %} + {% is_editorial_college request.user as is_editorial_college %} + {% is_advisory_board request.user as is_advisory_board %} + {% is_vetting_editor request.user as is_vetting_editor %} + {% is_ambassador request.user as is_ambassador %} + {% is_junior_ambassador request.user as is_junior_ambassador %} + {% is_registered_contributor request.user as is_registered_contributor %} + {% is_tester request.user as is_tester %} + {% is_production_officer request.user as is_production_officer %} + +<div class="row"> + <div class="col-12"> + <div class="card card-grey"> + <div class="card-body"> + <h2 class="card-title mb-0">Your Account</h2> + </div> + </div> + </div> +</div> +<div class="row"> + <div class="col-md-6"> + <h3>Your personal details:</h3> + {% include "scipost/_private_info_as_table.html" with contributor=contributor %} + + {% if contributor %} + {# Scientist fields #} + <h3 class="mt-3">Your main discipline:</h3> + <ul><li>{{ contributor.get_discipline_display }}</li></ul> + + <h3 class="mt-3">Your expertises:</h3> + {% if contributor.expertises %} + {% include "scipost/_expertises_as_ul.html" with contributor=contributor %} + {% else %} + <p>You haven't listed your expertise(s).<br/> + Do so by <a href="{% url 'scipost:update_personal_data' %}">updating your personal data</a> + </p> + {% endif %} + {# END: Scientist fields #} + {% endif %} + </div> + <div class="col-md-6"> + {% if contributor %} + {# Scientist fields #} + {% if not contributor.is_currently_available %} + <h3 class="text-warning">You are currently unavailable</h3> + <p>Check your availability underneath if this should not be the case.</p> + <hr> + {% endif %} + {# END: Scientist fields #} + {% endif %} + + {% if not contributor.petition_signatories.exists %} + <div class="border border-danger p-2"> + <h3 class="text-danger">Scientists, please help us out!</h3> + <p class="mb-1">If it is not listed on our Partners page, please encourage your institution (through a librarian, director, ...) to join by <a class="h3 text-blue" href="{% url 'petitions:petition' slug='join-SPB' %}">signing our petition</a>.</p> + </div> + <hr> + {% endif %} + + {% if is_scipost_admin %} + <h3>You are a SciPost Administrator.</h3> + {% endif %} + {% if is_edcol_admin %} + <h3>You are a SciPost Editorial Administrator.</h3> + {% endif %} + {% if is_advisory_board %} + <h3>You are a member of the Advisory Board.</h3> + {% endif %} + {% if is_editorial_college %} + <h3>You are a member of the Editorial College.</h3> + {% endif %} + {% if is_vetting_editor %} + <h3>You are a SciPost Vetting Editor.</h3> + {% endif %} + {% if is_registered_contributor %} + <h3>You are a Registered Contributor.</h3> + {% endif %} + {% if is_tester %} + <h3>You are a SciPost Tester.</h3> + {% endif %} + {% if is_ambassador %} + <h3>You are a SciPost Ambassador.</h3> + {% endif %} + {% if is_junior_ambassador %} + <h3>You are a SciPost Junior Ambassador.</h3> + {% endif %} + {% if is_production_officer %} + <h3>You are a SciPost Production Officer.</h3> + {% endif %} + + {% if contributor.fellowships.exists %} + <h3>Your Fellowships:</h3> + <ul class="mb-2"> + {% for fellowship in contributor.fellowships.all %} + <li class="pt-1"> + {{ fellowship.contributor.get_discipline_display }} + + {% if fellowship.guest %} + (Guest Fellowship) + {% else %} + (Regular Fellowship) + {% endif %} + + {% if not fellowship.is_active %} + <span class="label label-outline-warning label-sm">Inactive</span> + {% endif %} + + {% if fellowship.start_date or fellowship.until_date %} + <div class="text-muted"> + {% if fellowship.start_date %} + from {{ fellowship.start_date }} + {% endif %} + + {% if fellowship.until_date %} + until {{ fellowship.until_date }} + {% endif %} + </div> + {% endif %} + </li> + + {% endfor %} + </ul> + <a href="{% url 'submissions:pool' %}" class="h3 text-primary ml-4 px-3 d-block-inline">Go to the Submissions Pool</a> + {% endif %} + + <h3 class="mt-3">Update your personal data or password</h3> + + <ul> + <li><a href="{% url 'scipost:update_personal_data' %}">Update your personal data</a></li> + <li><a href="{% url 'scipost:change_password' %}">Change your password</a></li> + </ul> + </div> +</div> + +{% if unavailability_form %} + <hr> + <div class="row"> + <div class="col"> + <h2 class="highlight">Your Availability</h2> + </div> + </div> + <div class="row justify-content-center"> + <div class="col-md-4 mr-md-5"> + <p>To help with the editorial workflow, you can inform us of any periods during which you are unavailable. We will do our best to respect these.</p> + <h3 class="mb-3">Mark a period as unavailable:</h3> + <form action="{% url 'scipost:mark_unavailable_period' %}" method="post"> + {% csrf_token %} + {{ unavailability_form|bootstrap }} + <input class="btn btn-secondary" type="submit" value="Submit" /> + </form> + </div> + <div class="col-md-4 ml-md-5"> + {% if unavailabilities %} + <h3>Your unavailability periods in our records</h3> + <p class="text-muted">(YYYY-MM-DD)</p> + <table class="table"> + <tr> + <th>Start</th> + <th colspan="2">End</th> + </tr> + {% for unav in unavailabilities %} + <tr> + <td>{{ unav.start }}</td> + <td>{{ unav.end }}</td> + <td> + <form action="{% url 'scipost:delete_unavailable_period' unav.id %}" method="post"> + {% csrf_token %} + <input class="btn btn-danger" type="submit" value="Delete" /> + </form> + </td> + </tr> + {% endfor %} + </table> + {% else %} + <p>You don't have any upcoming unavailability periods on record.</p> + {% endif %} + </div> + </div> +{% endif %} diff --git a/scipost/templates/partials/scipost/personal_page/author_replies.html b/scipost/templates/partials/scipost/personal_page/author_replies.html new file mode 100644 index 0000000000000000000000000000000000000000..2149474b1344a93ed81533cd57b93ce41af54ce0 --- /dev/null +++ b/scipost/templates/partials/scipost/personal_page/author_replies.html @@ -0,0 +1,23 @@ +<div class="row"> + <div class="col-12"> + <div class="card card-grey"> + <div class="card-body"> + <h2 class="card-title mb-0">Your Author Replies</h2> + </div> + </div> + </div> +</div> + +<div class="row" id="myauthorreplieslist"> + <div class="col-12"> + <ul class="list-group list-group-flush"> + {% for own_reply in own_authorreplies %} + <li class="list-group-item"> + {% include 'comments/_comment_card_extended_for_author.html' with comment=own_reply %} + </li> + {% empty %} + <li class="list-group-item"><em>You do not have Author Replies yet.</em></li> + {% endfor %} + </ul> + </div> +</div> diff --git a/scipost/templates/partials/scipost/personal_page/commentaries.html b/scipost/templates/partials/scipost/personal_page/commentaries.html new file mode 100644 index 0000000000000000000000000000000000000000..2e50be5535ef30f630b23b89d014ade1d59e8e30 --- /dev/null +++ b/scipost/templates/partials/scipost/personal_page/commentaries.html @@ -0,0 +1,32 @@ +<div class="row"> + <div class="col-12"> + <div class="card card-grey"> + <div class="card-body"> + <h2 class="card-title">Commentaries</h2> + <ul class="mb-0"> + {% if nr_commentary_authorships_to_claim > 0 %} + <li><a href="{% url 'scipost:claim_authorships' %}">Potential authorships to claim (auto-detected: {{ nr_commentary_authorships_to_claim}})</a></li> + {% endif %} + <li><a href="{% url 'commentaries:request_commentary' %}">Request opening a SciPost Commentary Page</a></li> + </ul> + </div> + </div> + </div> +</div> + +<div class="row" id="mycommentarieslist"> + <div class="col-12"> + <h3>Commentaries for which you are identified as an author:</h3> + </div> + <div class="col-12"> + <ul class="list-group list-group-flush"> + {% for com in own_commentaries %} + <li class="list-group-item"> + {% include 'commentaries/_commentary_card_content.html' with commentary=com %} + </li> + {% empty %} + <li class="list-group-item"><em>No Commentaries found</em></li> + {% endfor %} + </ul> + </div> +</div> diff --git a/scipost/templates/partials/scipost/personal_page/comments.html b/scipost/templates/partials/scipost/personal_page/comments.html new file mode 100644 index 0000000000000000000000000000000000000000..f6a5f52db29c21f347f7cc59073eb7ed99940173 --- /dev/null +++ b/scipost/templates/partials/scipost/personal_page/comments.html @@ -0,0 +1,23 @@ +<div class="row"> + <div class="col-12"> + <div class="card card-grey"> + <div class="card-body"> + <h2 class="card-title mb-0">Your Comments</h2> + </div> + </div> + </div> +</div> + +<div class="row" id="mycommentslist"> + <div class="col-12"> + <ul class="list-group list-group-flush"> + {% for own_comment in own_comments %} + <li class="list-group-item"> + {% include 'comments/_comment_card_extended_for_author.html' with comment=own_comment %} + </li> + {% empty %} + <li class="list-group-item"><em>You have not commented yet.</em></li> + {% endfor %} + </ul> + </div> +</div> diff --git a/scipost/templates/partials/scipost/personal_page/editorial_actions.html b/scipost/templates/partials/scipost/personal_page/editorial_actions.html new file mode 100644 index 0000000000000000000000000000000000000000..ffd9844f50aeebf31bc1b66010cab5049542eb23 --- /dev/null +++ b/scipost/templates/partials/scipost/personal_page/editorial_actions.html @@ -0,0 +1,167 @@ + +<div class="row"> + <div class="col-12"> + <div class="card card-grey"> + <div class="card-body"> + <h2 class="card-title mb-0">Pending Editorial Actions</h2> + </div> + </div> + </div> +</div> + +<div class="row"> + {% if perms.scipost.can_vet_registration_requests or perms.scipost.can_draft_registration_invitations or perms.scipost.can_manage_registration_invitations %} + <div class="col-md-4"> + <h3>Registration actions</h3> + <ul> + {% if perms.scipost.can_vet_registration_requests %} + <li><a href="{% url 'scipost:vet_registration_requests' %}">Vet Registration requests</a> ({{ nr_reg_to_vet }})</li> + {% endif %} + {% if perms.scipost.can_resend_registration_requests %} + <li><a href="{% url 'scipost:registration_requests' %}">Awaiting validation</a> ({{ nr_reg_awaiting_validation }})</li> + {% endif %} + {% if perms.scipost.can_draft_registration_invitations %} + <li><a href="{% url 'scipost:draft_registration_invitation' %}">Draft a Registration Invitation</a></li> + {% endif %} + {% if perms.scipost.can_manage_registration_invitations %} + <li><a href="{% url 'scipost:registration_invitations' %}">Manage Registration Invitations</a></li> + {% endif %} + </ul> + + {% if perms.scipost.can_manage_registration_invitations %} + <h3>Notifications</h3> + <ul> + <li><a href="{% url 'scipost:citation_notifications' %}">Manage citation notifications</a></li> + </ul> + {% endif %} + + {% if is_scipost_admin %} + <h3>Email communications</h3> + <ul> + {% if perms.scipost.can_email_group_members %} + <li><a href="{% url 'scipost:email_group_members' %}">Email Group Members</a></li> + {% endif %} + {% if perms.scipost.can_email_particulars %} + <li><a href="{% url 'scipost:send_precooked_email' %}">Send a precooked email</a></li> + <li><a href="{% url 'scipost:email_particular' %}">Email a particular individual/address</a></li> + {% endif %} + {% if perms.scipost.can_manage_mailchimp %} + <li><a href="{% url 'mailing_lists:overview' %}">Manage mailing lists</a></li> + {% endif %} + </ul> + + <h3>SciPost Administation</h3> + <ul> + <li><a href="{% url 'affiliations:institutions' %}">Manage Institutions database</a></li> + </ul> + {% endif %} + + {% if perms.scipost.can_view_timesheets %} + <h3>Finance</h3> + <ul> + <li><a href="{% url 'finances:timesheets' %}">Production Team Timesheets</a></li> + </ul> + {% endif %} + </div> + {% endif %} + + <div class="col-md-4"> + {% if perms.scipost.can_vet_comments or perms.scipost.can_vet_submitted_reports %} + <h3>Vetting actions</h3> + <ul> + {% if perms.scipost.can_vet_commentary_requests %} + <li><a href="{% url 'commentaries:vet_commentary_requests' %}">Vet Commentary Page requests</a> ({{ nr_commentary_page_requests_to_vet }})</li> + {% endif %} + {% if perms.scipost.can_vet_comments %} + <li><a href="{% url 'comments:vet_submitted_comments_list' %}">Vet submitted Comments</a> ({{ nr_comments_to_vet }})</li> + {% endif %} + {% if perms.scipost.can_vet_thesislink_requests %} + <li><a href="{% url 'theses:unvetted_thesislinks' %}">Vet Thesis Link Requests</a> ({{ nr_thesislink_requests_to_vet }})</li> + {% endif %} + {% if perms.scipost.can_vet_authorship_claims %} + <li><a href="{% url 'scipost:vet_authorship_claims' %}">Vet Authorship Claims</a> ({{ nr_authorship_claims_to_vet }})</li> + {% endif %} + {% if perms.scipost.can_vet_submitted_reports %} + <li><a href="{% url 'submissions:vet_submitted_reports_list' %}">Vet submitted Reports</a> ({{ nr_reports_to_vet }})</li> + {% endif %} + </ul> + {% endif %} + + {% if perms.scipost.can_oversee_refereeing %} + <h3>Editorial Admin actions</h3> + <ul> + <li><a href="{% url 'submissions:reports_accepted_list' %}">Accepted Reports</a>{% if nr_reports_without_pdf %} ({{nr_reports_without_pdf}} unfinished){% endif %}</li> + <li><a href="{% url 'submissions:pool' %}">Submissions Pool</a></li> + <li><a href="{% url 'submissions:treated_submissions_list' %}">Fully treated Submissions</a>{% if nr_treated_submissions_without_pdf %} ({{nr_treated_submissions_without_pdf}} unfinished){% endif %}</li> + <li><a href="{% url 'journals:harvest_citedby_list' %}">Harvest citedby data</a></li> + <li><a href="{% url 'journals:manage_comment_metadata' %}">Manage Comment metadata</a></li> + <li><a href="{% url 'colleges:fellowships' %}">Manage Fellowships</a></li> + <li><a href="{% url 'journals:manage_metadata' %}">Manage Publication metadata</a></li> + <li><a href="{% url 'journals:manage_report_metadata' %}">Manage Report metadata</a></li> + <li><a href="{% url 'proceedings:proceedings' %}">Manage Proceedings Issues</a></li> + </ul> + {% endif %} + + {% if perms.scipost.can_attend_VGMs %} + <h3>Virtual General Meetings</h3> + <ul> + <li><a href="{% url 'virtualmeetings:VGMs' %}">List of VGMs</a></li> + </ul> + {% endif %} + </div> + + {% if perms.scipost.can_oversee_refereeing or perms.scipost.can_take_charge_of_submissions %} + <div class="col-md-4"> + <h3>Info</h3> + <ul> + <li><a href="{% url 'submissions:editorial_workflow' %}">How-to guide: summary of the editorial workflow</a></li> + </ul> + + <h3>Submissions assignments</h3> + <ul> + <li><a href="{% url 'submissions:assignments' %}">Your assignments</a></li> + <li><a href="{% url 'scipost:Fellow_activity_overview' %}">View assignments overview</a></li> + + {% if perms.scipost.can_assign_submissions %} + <li>Assign Submissions via the <a href="{% url 'submissions:pool' %}">Submissions Pool</a> ({{ nr_submissions_to_assign }})</li> + {% endif %} + {% if perms.scipost.can_take_charge_of_submissions %} + <li>Accept or decline assignments via the <a href="{% url 'submissions:pool' %}">Submissions Pool</a> ({{ nr_assignments_to_consider }})</li> + {% endif %} + </ul> + + {% if perms.scipost.can_oversee_refereeing %} + <h3>Refereeing overview</h3> + <ul> + <li>View (and act on) outstanding refereeing invitations in the <a href="{% url 'submissions:refereeing_overview' %}">refereeing overview</a></li> + <li><a href="{% url 'stats:statistics' %}">View statistics</a> for submissions, refereeing, publishing</li> + </ul> + <h3>Voting</h3> + <ul> + <li>Prepare Editorial Recommendations for voting via the <a href="{% url 'submissions:pool' %}">Submissions Pool</a> ({{ nr_recommendations_to_prepare_for_voting }})</li> + </ul> + {% endif %} + </div> + {% endif %} +</div> + +{% if active_assignments %} + <div class="row"> + <div class="col-12"> + <h3 class="highlight">Submissions for which you are Editor-in-charge</h3> + </div> + <div class="col-12"> + <ul class="list-group list-group-flush"> + {% for assignment in active_assignments %} + <li class="list-group-item"> + <div class="card-body px-0"> + {% include 'partials/submissions/submission_card_content.html' with submission=assignment.submission %} + {% include 'submissions/_submission_status_block.html' with submission=assignment.submission %} + <p class="card-text mt-2">Manage this Submission from its <a href="{% url 'submissions:editorial_page' assignment.submission.arxiv_identifier_w_vn_nr %}">Editorial Page</a>.</p> + </div> + </li> + {% endfor %} + </ul> + </div> + </div> +{% endif %} diff --git a/scipost/templates/partials/scipost/personal_page/publications.html b/scipost/templates/partials/scipost/personal_page/publications.html new file mode 100644 index 0000000000000000000000000000000000000000..302090e22d865ec6c41654a8311462e886883fb5 --- /dev/null +++ b/scipost/templates/partials/scipost/personal_page/publications.html @@ -0,0 +1,36 @@ +<div class="row"> + <div class="col-12"> + <div class="card card-grey"> + <div class="card-body"> + <h2 class="card-title">Publications</h2> + <ul class="mb-0"> + {% if nr_publication_authorships_to_claim > 0 %} + <li><a href="{% url 'scipost:claim_authorships' %}">Potential authorships to claim (auto-detected: {{ nr_publication_authorships_to_claim}})</a></li> + {% endif %} + </ul> + </div> + </div> + </div> +</div> + + +<div class="row" id="mypublicationslist"> + <div class="col-12"> + <h3 class="mb-3">Publications for which you are identified as an author:</h3> + </div> + <div class="col-12"> + <ul class="list-unstyled"> + {% for pub in own_publications %} + <li> + <div class="card card-grey card-publication" id="{{pub.doi_label}}"> + {% include 'journals/_publication_card_content.html' with publication=pub current_user=request.user %} + </div> + </li> + {% empty %} + <li> + <em>No Publications found</em> + </li> + {% endfor %} + </ul> + </div> +</div> diff --git a/scipost/templates/partials/scipost/personal_page/refereeing.html b/scipost/templates/partials/scipost/personal_page/refereeing.html new file mode 100644 index 0000000000000000000000000000000000000000..877189bf00c38496e2f037c5dc6a6cedfa90484b --- /dev/null +++ b/scipost/templates/partials/scipost/personal_page/refereeing.html @@ -0,0 +1,88 @@ +<div class="row"> + <div class="col-12"> + <div class="card card-grey"> + <div class="card-body"> + <h2 class="card-title">Refereeing Tasks</h2> + <ul class="mb-0"> + <li><a href="{% url 'submissions:accept_or_decline_ref_invitations' %}">Accept/decline refereeing invitations</a> ({{ contributor.referee_invitations.open.count }})</li> + </ul> + </div> + </div> + </div> +</div> + +<div class="row"> + <div class="col-12"> + <h3>Pending Refereeing Tasks:</h3> + </div> + <div class="col-12"> + <ul class="list-group list-group-flush"> + {% for task in contributor.referee_invitations.in_process.all %} + <li class="list-group-item"> + <div class="card-body px-0"> + {% include 'partials/submissions/refereeing_invitation_card_content.html' with invitation=task %} + </div> + </li> + {% empty %} + <li class="list-group-item"><em>You do not have any pending refereeing task</em></li> + {% endfor %} + </ul> + </div> +</div> + +{% if contributor.reports.in_draft.all %} + <div class="row"> + <div class="col-12"> + <h3>Unfinished reports:</h3> + </div> + <div class="col-12"> + <ul class="list-group list-group-flush"> + {% for report in contributor.reports.in_draft.all %} + <li class="list-group-item"> + <div class="card-body px-0"> + {% include 'partials/submissions/submission_card_content.html' with submission=report.submission %} + <a class="btn btn-outline-primary my-2" href="{% url 'submissions:submit_report' report.submission.arxiv_identifier_w_vn_nr %}">Finish report</a> + </div> + </li> + {% endfor %} + </ul> + </div> + </div> +{% endif %} + +{% if contributor.reports.non_draft.all %} + <div class="row"> + <div class="col-12"> + <h3>Finished reports:</h3> + </div> + <div class="col-12"> + <ul class="list-group list-group-flush"> + {% for report in contributor.reports.non_draft.all %} + <li class="list-group-item"> + {% comment %} + Temporary: There is already a template for a "Report summary" in a parallel (unmerged) branch. Awaiting merge to use that template. + {% endcomment %} + <div class="card-body px-0 {% block cardblock_class_block %}{% endblock %}"> + <h3>Report on Submission <a href="{{report.submission.get_absolute_url}}">{{report.submission.title}}</a></h3> + <table> + <tr> + <th style='min-width: 100px;'>Received:</th><td>{{ report.date_submitted|date:'Y-n-j' }}<td> + </tr> + <tr> + <th>Status:</th><td {% if report.status == 'vetted' %}class="text-success"{% elif report.status == 'unvetted' %}class="text-danger"{% endif %}>{{report.get_status_display}}</td> + </tr> + {% if report.doi_label %} + <tr> + <th>DOI:</th><td>{{ report.doi_string }}</td></th> +{% endif %} + <tr> + <th>Anonymous:</th><td>{{report.anonymous|yesno:'Yes,No'}}</td>{% if report.anonymous %}<td>You can <a href="{% url 'journals:sign_existing_report' report_id=report.id %}">click here to sign this Report</a> (leads to confirmation page){% endif %}</td> + </tr> + </table> + </div> + </li> + {% endfor %} + </ul> + </div> + </div> +{% endif %} diff --git a/scipost/templates/partials/scipost/personal_page/submissions.html b/scipost/templates/partials/scipost/personal_page/submissions.html new file mode 100644 index 0000000000000000000000000000000000000000..10215feea9d957c33393ba981509d81b0b40779f --- /dev/null +++ b/scipost/templates/partials/scipost/personal_page/submissions.html @@ -0,0 +1,50 @@ +<div class="row"> + <div class="col-12"> + <div class="card card-grey"> + <div class="card-body"> + <h2 class="card-title">Submissions</h2> + <ul class="mb-0"> + {% if nr_submission_authorships_to_claim > 0 %} + <li><a href="{% url 'scipost:claim_authorships' %}">Potential authorships to claim (auto-detected: {{ nr_submission_authorships_to_claim }})</a></li> + {% endif %} + <li><a href="{% url 'submissions:submit_manuscript' %}">Submit an arXiv preprint to a SciPost Journal</a></li> + </ul> + </div> + </div> + </div> +</div> + +{# {% if own_submissions %}#} +<div class="row" id="mysubmissionslist"> + <div class="col-12"> + <h3>Submissions for which you are identified as an author:</h3> + </div> + <div class="col-12"> + <ul class="list-group list-group-flush"> + {% for sub in own_submissions %}nr_submission_authorships_to_claim, + <li class="list-group-item"> + <div class="card-body px-0"> + {% include 'partials/submissions/submission_card_content.html' with submission=sub %} + {% include 'submissions/_submission_status_block.html' with submission=sub %} + + {% if request.user.contributor == sub.submitted_by %} + <p class="card-text mt-1"> + {% if sub.editor_in_charge %} + <a href="{% url 'submissions:communication' sub.arxiv_identifier_w_vn_nr 'AtoE' %}">Write to the Editor-in-charge</a> + {% endif %} + {% if sub.status == 'revision_requested' %} + · <a href="{% url 'submissions:prefill_using_identifier' %}?identifier={{ sub.arxiv_identifier_wo_vn_nr }}">Resubmit this manuscript</a> + {% endif %} + </p> + {% endif %} + </div> + </li> + {% empty %} + <li class="list-group-item"> + <em>No Submissions found</em> + </li> + {% endfor %} + </ul> + </div> +</div> +{# {% endif %}#} diff --git a/scipost/templates/partials/scipost/personal_page/theses.html b/scipost/templates/partials/scipost/personal_page/theses.html new file mode 100644 index 0000000000000000000000000000000000000000..de0e22998d920a70b8a3ac95e133ae82c0d9c372 --- /dev/null +++ b/scipost/templates/partials/scipost/personal_page/theses.html @@ -0,0 +1,32 @@ +<div class="row"> + <div class="col-12"> + <div class="card card-grey"> + <div class="card-body"> + <h2 class="card-title">Theses</h2> + <ul class="mb-0"> + {% if nr_thesis_authorships_to_claim > 0 %} + <li><a href="{% url 'scipost:claim_authorships' %}">Potential authorships to claim (auto-detected: {{ nr_thesis_authorships_to_claim}})</a></li> + {% endif %} + <li><a href="{% url 'theses:request_thesislink' %}">Request a SciPost ThesisLink</a></li> + </ul> + </div> + </div> + </div> +</div> + +<div class="row" id="mytheseslist"> + <div class="col-12"> + <h3>Theses for which you are identified as an author:</h3> + </div> + <div class="col-12"> + <ul class="list-group list-group-flush"> + {% for thesis in own_thesislinks %} + <li class="list-group-item"> + {% include 'theses/_thesislink_card_content.html' with thesislink=thesis %} + </li> + {% empty %} + <li class="list-group-item"><em>No Theses found</em></li> + {% endfor %} + </ul> + </div> +</div> diff --git a/scipost/templates/scipost/personal_page.html b/scipost/templates/scipost/personal_page.html index a52677412895330839337f2beeec6e73d2549ad3..07ef2154191f647be2d7e03d1addc02b35542ea6 100644 --- a/scipost/templates/scipost/personal_page.html +++ b/scipost/templates/scipost/personal_page.html @@ -45,40 +45,40 @@ <!-- Nav tabs --> <ul class="nav btn-group personal-page-nav" role="tablist"> <li class="nav-item btn btn-secondary"> - <a href="#account" class="nav-link active" data-toggle="tab">Account</a> + <a class="nav-link" {% if tab == 'account' %}sp-autoload='true'{% endif %} href="#account" sp-dynamic-load="{% url 'scipost:personal_page_account' %}" data-toggle="tab">Account</a> </li> {% if is_scipost_admin or is_edcol_admin or is_editorial_college or is_advisory_board or is_vetting_editor or is_ambassador or is_junior_ambassador %} <li class="nav-item btn btn-secondary"> - <a href="#editorial-actions" class="nav-link" data-toggle="tab">Editorial Actions</a> + <a class="nav-link" {% if tab == 'editorial_actions' %}sp-autoload='true'{% endif %} href="#editorial-actions" sp-dynamic-load="{% url 'scipost:personal_page_editorial_actions' %}" data-toggle="tab">Editorial Actions</a> </li> {% endif %} {% if perms.scipost.can_referee %} <li class="nav-item btn btn-secondary"> - <a class="nav-link" data-toggle="tab" href="#refereeing">Refereeing {% if refereeing_tab_total_count %}({{refereeing_tab_total_count}}){% endif %}</a> + <a class="nav-link" {% if tab == 'refereeing' %}sp-autoload='true'{% endif %} data-toggle="tab" href="#refereeing" sp-dynamic-load="{% url 'scipost:personal_page_refereeing' %}">Refereeing {% if refereeing_tab_total_count %}({{refereeing_tab_total_count}}){% endif %}</a> </li> {% endif %} {% if contributor %} {# If user is contributor #} <li class="nav-item btn btn-secondary"> - <a class="nav-link" data-toggle="tab" href="#publications">Publications</a> + <a class="nav-link" {% if tab == 'publications' %}sp-autoload='true'{% endif %} data-toggle="tab" sp-dynamic-load="{% url 'scipost:personal_page_publications' %}" href="#publications">Publications</a> </li> <li class="nav-item btn btn-secondary"> - <a class="nav-link" data-toggle="tab" href="#submissions">Submissions</a> + <a class="nav-link" {% if tab == 'submissions' %}sp-autoload='true'{% endif %} data-toggle="tab" sp-dynamic-load="{% url 'scipost:personal_page_submissions' %}" href="#submissions">Submissions</a> </li> <li class="nav-item btn btn-secondary"> - <a class="nav-link" data-toggle="tab" href="#commentaries">Commentaries</a> + <a class="nav-link" {% if tab == 'commentaries' %}sp-autoload='true'{% endif %} data-toggle="tab" sp-dynamic-load="{% url 'scipost:personal_page_commentaries' %}" href="#commentaries">Commentaries</a> </li> <li class="nav-item btn btn-secondary"> - <a class="nav-link" data-toggle="tab" href="#theses">Theses</a> + <a class="nav-link" {% if tab == 'theses' %}sp-autoload='true'{% endif %} data-toggle="tab" sp-dynamic-load="{% url 'scipost:personal_page_theses' %}" href="#theses">Theses</a> </li> <li class="nav-item btn btn-secondary"> {% with contributor.comments.regular_comments.awaiting_vetting.count as count %} - <a class="nav-link" data-toggle="tab" href="#comments">Comments{% if count %} ({{count}} unvetted){% endif %}</a> + <a class="nav-link" {% if tab == 'comments' %}sp-autoload='true'{% endif %} data-toggle="tab" sp-dynamic-load="{% url 'scipost:personal_page_comments' %}" href="#comments">Comments{% if count %} ({{count}} unvetted){% endif %}</a> {% endwith %} </li> <li class="nav-item btn btn-secondary"> {% with contributor.comments.author_replies.awaiting_vetting.count as count %} - <a class="nav-link" data-toggle="tab" href="#author-replies">Author Replies{% if count %} ({{count}} unvetted){% endif %}</a> + <a class="nav-link" {% if tab == 'author_replies' %}sp-autoload='true'{% endif %} data-toggle="tab" sp-dynamic-load="{% url 'scipost:personal_page_author_replies' %}" href="#author-replies">Author Replies{% if count %} ({{count}} unvetted){% endif %}</a> {% endwith %} </li> {# END: If user is contributor #} @@ -92,676 +92,45 @@ <div class="tab-content"> <!-- Tab: Account --> <div class="tab-pane active" id="account" role="tabpanel"> - <div class="row"> - <div class="col-12"> - <div class="card card-grey"> - <div class="card-body"> - <h2 class="card-title mb-0">Your Account</h2> - </div> - </div> - </div> - </div> - <div class="row"> - <div class="col-md-6"> - <h3>Your personal details:</h3> - {% include "scipost/_private_info_as_table.html" with contributor=contributor %} - - {% if contributor %} - {# Scientist fields #} - <h3 class="mt-3">Your main discipline:</h3> - <ul><li>{{ contributor.get_discipline_display }}</li></ul> - - <h3 class="mt-3">Your expertises:</h3> - {% if contributor.expertises %} - {% include "scipost/_expertises_as_ul.html" with contributor=contributor %} - {% else %} - <p>You haven't listed your expertise(s).<br/> - Do so by <a href="{% url 'scipost:update_personal_data' %}">updating your personal data</a> - </p> - {% endif %} - {# END: Scientist fields #} - {% endif %} - </div> - <div class="col-md-6"> - {% if contributor %} - {# Scientist fields #} - {% if not contributor.is_currently_available %} - <h3 class="text-warning">You are currently unavailable</h3> - <p>Check your availability underneath if this should not be the case.</p> - <hr> - {% endif %} - {# END: Scientist fields #} - {% endif %} - - {% if not request.user.contributor.petition_signatories.exists %} - <div class="border border-danger p-2"> - <h3 class="text-danger">Scientists, please help us out!</h3> - <p class="mb-1">If it is not listed on our Partners page, please encourage your institution (through a librarian, director, ...) to join by <a class="h3 text-blue" href="{% url 'petitions:petition' slug='join-SPB' %}">signing our petition</a>.</p> - </div> - <hr> - {% endif %} - - {% if is_scipost_admin %} - <h3>You are a SciPost Administrator.</h3> - {% endif %} - {% if is_edcol_admin %} - <h3>You are a SciPost Editorial Administrator.</h3> - {% endif %} - {% if is_advisory_board %} - <h3>You are a member of the Advisory Board.</h3> - {% endif %} - {% if is_editorial_college %} - <h3>You are a member of the Editorial College.</h3> - {% endif %} - {% if is_vetting_editor %} - <h3>You are a SciPost Vetting Editor.</h3> - {% endif %} - {% if is_registered_contributor %} - <h3>You are a Registered Contributor.</h3> - {% endif %} - {% if is_tester %} - <h3>You are a SciPost Tester.</h3> - {% endif %} - {% if is_ambassador %} - <h3>You are a SciPost Ambassador.</h3> - {% endif %} - {% if is_junior_ambassador %} - <h3>You are a SciPost Junior Ambassador.</h3> - {% endif %} - {% if is_production_officer %} - <h3>You are a SciPost Production Officer.</h3> - {% endif %} - - {% if contributor.fellowships.exists %} - <h3>Your Fellowships:</h3> - <ul class="mb-2"> - {% for fellowship in contributor.fellowships.all %} - <li class="pt-1"> - {{ fellowship.contributor.get_discipline_display }} - - {% if fellowship.guest %} - (Guest Fellowship) - {% else %} - (Regular Fellowship) - {% endif %} - - {% if not fellowship.is_active %} - <span class="label label-outline-warning label-sm">Inactive</span> - {% endif %} - - {% if fellowship.start_date or fellowship.until_date %} - <div class="text-muted"> - {% if fellowship.start_date %} - from {{ fellowship.start_date }} - {% endif %} - - {% if fellowship.until_date %} - until {{ fellowship.until_date }} - {% endif %} - </div> - {% endif %} - </li> - - {% endfor %} - </ul> - <a href="{% url 'submissions:pool' %}" class="h3 text-primary ml-4 px-3 d-block-inline">Go to the Submissions Pool</a> - {% endif %} - - <h3 class="mt-3">Update your personal data or password</h3> - - <ul> - <li><a href="{% url 'scipost:update_personal_data' %}">Update your personal data</a></li> - <li><a href="{% url 'scipost:change_password' %}">Change your password</a></li> - </ul> - </div> - </div> - - {% if unavailability_form %} - <hr> - <div class="row"> - <div class="col"> - <h2 class="highlight">Your Availability</h2> - </div> - </div> - <div class="row justify-content-center"> - <div class="col-md-4 mr-md-5"> - <p>To help with the editorial workflow, you can inform us of any periods during which you are unavailable. We will do our best to respect these.</p> - <h3 class="mb-3">Mark a period as unavailable:</h3> - <form action="{% url 'scipost:mark_unavailable_period' %}" method="post"> - {% csrf_token %} - {{ unavailability_form|bootstrap }} - <input class="btn btn-secondary" type="submit" value="Submit" /> - </form> - </div> - <div class="col-md-4 ml-md-5"> - {% if unavailabilities %} - <h3>Your unavailability periods in our records</h3> - <p class="text-muted">(YYYY-MM-DD)</p> - <table class="table"> - <tr> - <th>Start</th> - <th colspan="2">End</th> - </tr> - {% for unav in unavailabilities %} - <tr> - <td>{{ unav.start }}</td> - <td>{{ unav.end }}</td> - <td> - <form action="{% url 'scipost:delete_unavailable_period' unav.id %}" method="post"> - {% csrf_token %} - <input class="btn btn-danger" type="submit" value="Delete" /> - </form> - </td> - </tr> - {% endfor %} - </table> - {% else %} - <p>You don't have any upcoming unavailability periods on record.</p> - {% endif %} - </div> - </div> - {% endif %} </div><!-- End tab --> {% if is_scipost_admin or is_edcol_admin or is_editorial_college or is_advisory_board or is_vetting_editor or is_ambassador or is_junior_ambassador %} <!-- Tab: Editorial Actions --> <div class="tab-pane" id="editorial-actions" role="tabpanel"> - <div class="row"> - <div class="col-12"> - <div class="card card-grey"> - <div class="card-body"> - <h2 class="card-title mb-0">Pending Editorial Actions</h2> - </div> - </div> - </div> - </div> - - <div class="row"> - {% if is_scipost_admin or is_advisory_board or is_ambassador or is_junior_ambassador %} - <div class="col-md-4"> - <h3>Registration actions</h3> - <ul> - {% if perms.scipost.can_vet_registration_requests %} - <li><a href="{% url 'scipost:vet_registration_requests' %}">Vet Registration requests</a> ({{ nr_reg_to_vet }})</li> - {% endif %} - {% if perms.scipost.can_resend_registration_requests %} - <li><a href="{% url 'scipost:registration_requests' %}">Awaiting validation</a> ({{ nr_reg_awaiting_validation }})</li> - {% endif %} - {% if perms.scipost.can_draft_registration_invitations %} - <li><a href="{% url 'scipost:draft_registration_invitation' %}">Draft a Registration Invitation</a></li> - {% endif %} - {% if perms.scipost.can_manage_registration_invitations %} - <li><a href="{% url 'scipost:registration_invitations' %}">Manage Registration Invitations</a></li> - {% endif %} - </ul> - - {% if perms.scipost.can_manage_registration_invitations %} - <h3>Notifications</h3> - <ul> - <li><a href="{% url 'scipost:citation_notifications' %}">Manage citation notifications</a></li> - </ul> - {% endif %} - - {% if is_scipost_admin %} - <h3>Email communications</h3> - <ul> - {% if perms.scipost.can_email_group_members %} - <li><a href="{% url 'scipost:email_group_members' %}">Email Group Members</a></li> - {% endif %} - {% if perms.scipost.can_email_particulars %} - <li><a href="{% url 'scipost:send_precooked_email' %}">Send a precooked email</a></li> - <li><a href="{% url 'scipost:email_particular' %}">Email a particular individual/address</a></li> - {% endif %} - {% if perms.scipost.can_manage_mailchimp %} - <li><a href="{% url 'mailing_lists:overview' %}">Manage mailing lists</a></li> - {% endif %} - </ul> - - <h3>SciPost Administation</h3> - <ul> - <li><a href="{% url 'affiliations:institutions' %}">Manage Institutions database</a></li> - </ul> - {% endif %} - - {% if perms.scipost.can_view_timesheets %} - <h3>Finance</h3> - <ul> - <li><a href="{% url 'finances:timesheets' %}">Production Team Timesheets</a></li> - </ul> - {% endif %} - </div> - {% endif %} - - <div class="col-md-4"> - {% if is_vetting_editor or perms.scipost.can_vet_submitted_reports %} - <h3>Vetting actions</h3> - <ul> - {% if perms.scipost.can_vet_commentary_requests %} - <li><a href="{% url 'commentaries:vet_commentary_requests' %}">Vet Commentary Page requests</a> ({{ nr_commentary_page_requests_to_vet }})</li> - {% endif %} - {% if perms.scipost.can_vet_comments %} - <li><a href="{% url 'comments:vet_submitted_comments_list' %}">Vet submitted Comments</a> ({{ nr_comments_to_vet }})</li> - {% endif %} - {% if perms.scipost.can_vet_thesislink_requests %} - <li><a href="{% url 'theses:unvetted_thesislinks' %}">Vet Thesis Link Requests</a> ({{ nr_thesislink_requests_to_vet }})</li> - {% endif %} - {% if perms.scipost.can_vet_authorship_claims %} - <li><a href="{% url 'scipost:vet_authorship_claims' %}">Vet Authorship Claims</a> ({{ nr_authorship_claims_to_vet }})</li> - {% endif %} - {% if perms.scipost.can_vet_submitted_reports %} - <li><a href="{% url 'submissions:vet_submitted_reports_list' %}">Vet submitted Reports</a> ({{ nr_reports_to_vet }})</li> - {% endif %} - </ul> - {% endif %} - - {% if is_edcol_admin %} - <h3>Editorial Admin actions</h3> - <ul> - <li><a href="{% url 'submissions:reports_accepted_list' %}">Accepted Reports</a>{% if nr_reports_without_pdf %} ({{nr_reports_without_pdf}} unfinished){% endif %}</li> - <li><a href="{% url 'submissions:pool' %}">Submissions Pool</a></li> - <li><a href="{% url 'submissions:treated_submissions_list' %}">Fully treated Submissions</a>{% if nr_treated_submissions_without_pdf %} ({{nr_treated_submissions_without_pdf}} unfinished){% endif %}</li> - <li><a href="{% url 'journals:harvest_citedby_list' %}">Harvest citedby data</a></li> - <li><a href="{% url 'journals:manage_comment_metadata' %}">Manage Comment metadata</a></li> - <li><a href="{% url 'colleges:fellowships' %}">Manage Fellowships</a></li> - <li><a href="{% url 'journals:manage_metadata' %}">Manage Publication metadata</a></li> - <li><a href="{% url 'journals:manage_report_metadata' %}">Manage Report metadata</a></li> - <li><a href="{% url 'proceedings:proceedings' %}">Manage Proceedings Issues</a></li> - </ul> - {% endif %} - - {% if perms.scipost.can_attend_VGMs %} - <h3>Virtual General Meetings</h3> - <ul> - <li><a href="{% url 'virtualmeetings:VGMs' %}">List of VGMs</a></li> - </ul> - {% endif %} - </div> - - {% if is_edcol_admin or is_editorial_college %} - <div class="col-md-4"> - <h3>Info</h3> - <ul> - <li><a href="{% url 'submissions:editorial_workflow' %}">How-to guide: summary of the editorial workflow</a></li> - </ul> - - <h3>Submissions assignments</h3> - <ul> - {% if perms.scipost.can_view_pool %} - <li><a href="{% url 'submissions:assignments' %}">Your assignments</a></li> - <li><a href="{% url 'scipost:Fellow_activity_overview' %}">View assignments overview</a></li> - {% endif %} - {% if perms.scipost.can_assign_submissions %} - <li>Assign Submissions via the <a href="{% url 'submissions:pool' %}">Submissions Pool</a> ({{ nr_submissions_to_assign }})</li> - {% endif %} - {% if perms.scipost.can_take_charge_of_submissions %} - <li>Accept or decline assignments via the <a href="{% url 'submissions:pool' %}">Submissions Pool</a> ({{ nr_assignments_to_consider }})</li> - {% endif %} - </ul> - - {% if is_edcol_admin %} - <h3>Refereeing overview</h3> - <ul> - <li>View (and act on) outstanding refereeing invitations in the <a href="{% url 'submissions:refereeing_overview' %}">refereeing overview</a></li> - </ul> - <h3>Voting</h3> - <ul> - <li>Prepare Editorial Recommendations for voting via the <a href="{% url 'submissions:pool' %}">Submissions Pool</a> ({{ nr_recommendations_to_prepare_for_voting }})</li> - </ul> - {% endif %} - {% if perms.scipost.can_view_statistics %} - <h3>Statistics</h3> - <ul> - <li><a href="{% url 'stats:statistics' %}">View statistics</a> for submissions, refereeing, publishing</li> - </ul> - {% endif %} - </div> - {% endif %} - </div> - - {% if active_assignments %} - <div class="row"> - <div class="col-12"> - <h3 class="highlight">Submissions for which you are Editor-in-charge</h3> - </div> - <div class="col-12"> - <ul class="list-group list-group-flush"> - {% for assignment in active_assignments %} - <li class="list-group-item"> - <div class="card-body px-0"> - {% include 'partials/submissions/submission_card_content.html' with submission=assignment.submission %} - {% include 'submissions/_submission_status_block.html' with submission=assignment.submission %} - <p class="card-text mt-2">Manage this Submission from its <a href="{% url 'submissions:editorial_page' assignment.submission.arxiv_identifier_w_vn_nr %}">Editorial Page</a>.</p> - </div> - </li> - {% endfor %} - </ul> - </div> - </div> - {% endif %} </div><!-- End tab --> {% endif %} {% if contributor %} - {# If user is contributor #} + {# If user is contributor #} <!-- Tab: Publications --> <div class="tab-pane" id="publications" role="tabpanel"> - <div class="row"> - <div class="col-12"> - <div class="card card-grey"> - <div class="card-body"> - <h2 class="card-title">Publications</h2> - <ul class="mb-0"> - {% if nr_publication_authorships_to_claim > 0 %} - <li><a href="{% url 'scipost:claim_authorships' %}">Potential authorships to claim (auto-detected: {{ nr_publication_authorships_to_claim}})</a></li> - {% endif %} - </ul> - </div> - </div> - </div> - </div> - - {# {% if own_publications %}#} - <div class="row" id="mypublicationslist"> - <div class="col-12"> - <h3 class="mb-3">Publications for which you are identified as an author:</h3> - </div> - <div class="col-12"> - <ul class="list-unstyled"> - {% for pub in own_publications %} - <li> - <div class="card card-grey card-publication" id="{{pub.doi_label}}"> - {% include 'journals/_publication_card_content.html' with publication=pub current_user=request.user %} - </div> - </li> - {% empty %} - <li> - <em>No Publications found</em> - </li> - {% endfor %} - </ul> - </div> - </div> - {# {% endif %}#} </div><!-- End tab --> - {% if perms.scipost.can_referee %} + {% if perms.scipost.can_referee %} <!-- Tab: Refereeing --> <div class="tab-pane" id="refereeing" role="tabpanel"> - <div class="row"> - <div class="col-12"> - <div class="card card-grey"> - <div class="card-body"> - <h2 class="card-title">Refereeing Tasks</h2> - <ul class="mb-0"> - <li><a href="{% url 'submissions:accept_or_decline_ref_invitations' %}">Accept/decline refereeing invitations</a> ({{ nr_ref_inv_to_consider }})</li> - </ul> - </div> - </div> - </div> - </div> - - <div class="row"> - <div class="col-12"> - <h3>Pending Refereeing Tasks:</h3> - </div> - <div class="col-12"> - <ul class="list-group list-group-flush"> - {% for task in pending_ref_tasks %} - <li class="list-group-item"> - <div class="card-body px-0"> - {% include 'partials/submissions/refereeing_invitation_card_content.html' with invitation=task %} - </div> - </li> - {% empty %} - <li class="list-group-item"><em>You do not have any pending refereeing task</em></li> - {% endfor %} - </ul> - </div> - </div> - - {% if contributor.reports.in_draft.exists %} - <div class="row"> - <div class="col-12"> - <h3>Unfinished reports:</h3> - </div> - <div class="col-12"> - <ul class="list-group list-group-flush"> - {% for report in contributor.reports.in_draft.all %} - <li class="list-group-item"> - <div class="card-body px-0"> - {% include 'partials/submissions/submission_card_content.html' with submission=report.submission %} - <a class="btn btn-outline-primary my-2" href="{% url 'submissions:submit_report' report.submission.arxiv_identifier_w_vn_nr %}">Finish report</a> - </div> - </li> - {% endfor %} - </ul> - </div> - </div> - {% endif %} - - {% if contributor.reports.non_draft.exists %} - <div class="row"> - <div class="col-12"> - <h3>Finished reports:</h3> - </div> - <div class="col-12"> - <ul class="list-group list-group-flush"> - {% for report in contributor.reports.non_draft.all %} - <li class="list-group-item"> - {% comment %} - Temporary: There is already a template for a "Report summary" in a parallel (unmerged) branch. Awaiting merge to use that template. - {% endcomment %} - <div class="card-body px-0 {% block cardblock_class_block %}{% endblock %}"> - <h3>Report on Submission <a href="{{report.submission.get_absolute_url}}">{{report.submission.title}}</a></h3> - <table> - <tr> - <th style='min-width: 100px;'>Received:</th><td>{{ report.date_submitted|date:'Y-n-j' }}<td> - </tr> - <tr> - <th>Status:</th><td {% if report.status == 'vetted' %}class="text-success"{% elif report.status == 'unvetted' %}class="text-danger"{% endif %}>{{report.get_status_display}}</td> - </tr> - <tr> - <th>Type:</th><td>{{ report.invited|yesno:'Invited,Contributed' }} Report</td> - </tr> - {% if report.doi_label %} - <tr> - <th>DOI:</th><td>{{ report.doi_string }}</td> - </tr> - {% endif %} - <tr> - <th>Anonymous:</th><td>{{report.anonymous|yesno:'Yes,No'}}</td>{% if report.anonymous %}<td>You can <a href="{% url 'journals:sign_existing_report' report_id=report.id %}">click here to sign this Report</a> (leads to confirmation page){% endif %}</td> - </tr> - </table> - </div> - </li> - {% endfor %} - </ul> - </div> - </div> - {% endif %} </div><!-- End tab --> {% endif %} <!-- Tab: Submissions --> <div class="tab-pane" id="submissions" role="tabpanel"> - <div class="row"> - <div class="col-12"> - <div class="card card-grey"> - <div class="card-body"> - <h2 class="card-title">Submissions</h2> - <ul class="mb-0"> - {% if nr_submission_authorships_to_claim > 0 %} - <li><a href="{% url 'scipost:claim_authorships' %}">Potential authorships to claim (auto-detected: {{ nr_submission_authorships_to_claim}})</a></li> - {% endif %} - <li><a href="{% url 'submissions:submit_manuscript' %}">Submit an arXiv preprint to a SciPost Journal</a></li> - </ul> - </div> - </div> - </div> - </div> - - {# {% if own_submissions %}#} - <div class="row" id="mysubmissionslist"> - <div class="col-12"> - <h3>Submissions for which you are identified as an author:</h3> - </div> - <div class="col-12"> - <ul class="list-group list-group-flush"> - {% for sub in own_submissions %} - <li class="list-group-item"> - <div class="card-body px-0"> - {% include 'partials/submissions/submission_card_content.html' with submission=sub %} - {% include 'submissions/_submission_status_block.html' with submission=sub %} - - {% if request.user.contributor == sub.submitted_by %} - <p class="card-text mt-1"> - {% if sub.editor_in_charge %} - <a href="{% url 'submissions:communication' sub.arxiv_identifier_w_vn_nr 'AtoE' %}">Write to the Editor-in-charge</a> - {% endif %} - {% if sub.status == 'revision_requested' %} - · <a href="{% url 'submissions:prefill_using_identifier' %}?identifier={{ sub.arxiv_identifier_wo_vn_nr }}">Resubmit this manuscript</a> - {% endif %} - </p> - {% endif %} - </div> - </li> - {% empty %} - <li class="list-group-item"> - <em>No Submissions found</em> - </li> - {% endfor %} - </ul> - </div> - </div> - {# {% endif %}#} </div><!-- End tab --> <!-- Tab: Commentaries --> <div class="tab-pane" id="commentaries" role="tabpanel"> - <div class="row"> - <div class="col-12"> - <div class="card card-grey"> - <div class="card-body"> - <h2 class="card-title">Commentaries</h2> - <ul class="mb-0"> - {% if nr_commentary_authorships_to_claim > 0 %} - <li><a href="{% url 'scipost:claim_authorships' %}">Potential authorships to claim (auto-detected: {{ nr_commentary_authorships_to_claim}})</a></li> - {% endif %} - <li><a href="{% url 'commentaries:request_commentary' %}">Request opening a SciPost Commentary Page</a></li> - </ul> - </div> - </div> - </div> - </div> - - <div class="row" id="mycommentarieslist"> - <div class="col-12"> - <h3>Commentaries for which you are identified as an author:</h3> - </div> - <div class="col-12"> - <ul class="list-group list-group-flush"> - {% for com in own_commentaries %} - <li class="list-group-item"> - {% include 'commentaries/_commentary_card_content.html' with commentary=com %} - </li> - {% empty %} - <li class="list-group-item"><em>No Commentaries found</em></li> - {% endfor %} - </ul> - </div> - </div> </div><!-- End tab --> <!-- Tab: Theses --> <div class="tab-pane" id="theses" role="tabpanel"> - <div class="row"> - <div class="col-12"> - <div class="card card-grey"> - <div class="card-body"> - <h2 class="card-title">Theses</h2> - <ul class="mb-0"> - {% if nr_thesis_authorships_to_claim > 0 %} - <li><a href="{% url 'scipost:claim_authorships' %}">Potential authorships to claim (auto-detected: {{ nr_thesis_authorships_to_claim}})</a></li> - {% endif %} - <li><a href="{% url 'theses:request_thesislink' %}">Request a SciPost ThesisLink</a></li> - </ul> - </div> - </div> - </div> - </div> - - <div class="row" id="mytheseslist"> - <div class="col-12"> - <h3>Theses for which you are identified as an author:</h3> - </div> - <div class="col-12"> - <ul class="list-group list-group-flush"> - {% for thesis in own_thesislinks %} - <li class="list-group-item"> - {% include 'theses/_thesislink_card_content.html' with thesislink=thesis %} - </li> - {% empty %} - <li class="list-group-item"><em>No Theses found</em></li> - {% endfor %} - </ul> - </div> - </div> - </div><!-- End tab --> <!-- Tab: Comments --> <div class="tab-pane" id="comments" role="tabpanel"> - <div class="row"> - <div class="col-12"> - <div class="card card-grey"> - <div class="card-body"> - <h2 class="card-title mb-0">Your Comments</h2> - </div> - </div> - </div> - </div> - - <div class="row" id="mycommentslist"> - <div class="col-12"> - <ul class="list-group list-group-flush"> - {% for own_comment in own_comments %} - <li class="list-group-item"> - {% include 'comments/_comment_card_extended_for_author.html' with comment=own_comment %} - </li> - {% empty %} - <li class="list-group-item"><em>You have not commented yet.</em></li> - {% endfor %} - </ul> - </div> - </div> </div><!-- End tab --> <!-- Tab: Author Replies --> <div class="tab-pane" id="author-replies" role="tabpanel"> - <div class="row"> - <div class="col-12"> - <div class="card card-grey"> - <div class="card-body"> - <h2 class="card-title mb-0">Your Author Replies</h2> - </div> - </div> - </div> - </div> - - <div class="row" id="myauthorreplieslist"> - <div class="col-12"> - <ul class="list-group list-group-flush"> - {% for own_reply in own_authorreplies %} - <li class="list-group-item"> - {% include 'comments/_comment_card_extended_for_author.html' with comment=own_reply %} - </li> - {% empty %} - <li class="list-group-item"><em>You do not have Author Replies yet.</em></li> - {% endfor %} - </ul> - </div> - </div> </div><!-- End tab --> {# END: If user is contributor #} diff --git a/scipost/urls.py b/scipost/urls.py index 3389075ecd634d4edeeecb7fc0f6a3522f58c16d..102f794c0ffad8e8266a6a5c290672e5c85864ef 100644 --- a/scipost/urls.py +++ b/scipost/urls.py @@ -124,13 +124,33 @@ urlpatterns = [ # Authentication url(r'^login/$', views.login_view, name='login'), url(r'^logout$', views.logout_view, name='logout'), - url(r'^personal_page$', views.personal_page, name='personal_page'), url(r'^change_password$', views.change_password, name='change_password'), url(r'^reset_password_confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', views.reset_password_confirm, name='reset_password_confirm'), url(r'^reset_password/$', views.reset_password, name='reset_password'), url(r'^update_personal_data$', views.update_personal_data, name='update_personal_data'), + # 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/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'}), + # 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, diff --git a/scipost/views.py b/scipost/views.py index a9fe527bf5667f0f4f2368b966a3ca8c66dc58a7..f370969ba51a399f604980fd9005c591be154a8c 100644 --- a/scipost/views.py +++ b/scipost/views.py @@ -9,6 +9,7 @@ from django.contrib.auth.decorators import login_required, user_passes_test from django.contrib.auth.models import Group from django.contrib.auth.views import password_reset, password_reset_confirm from django.core import mail +from django.core.exceptions import PermissionDenied from django.core.mail import EmailMessage, EmailMultiAlternatives from django.core.paginator import Paginator from django.core.urlresolvers import reverse @@ -715,14 +716,216 @@ def delete_unavailable_period(request, period_id): @login_required -def personal_page(request): +@user_passes_test(has_contributor) +def _personal_page_editorial_account(request): + """ + The Personal Page tab: Account + """ + contributor = request.user.contributor + context = { + 'contributor': contributor, + 'unavailability_form': UnavailabilityPeriodForm(), + 'unavailabilities': contributor.unavailability_periods.future().order_by('start') + } + return render(request, 'partials/scipost/personal_page/account.html', context) + + +@user_passes_test(has_contributor) +def _personal_page_editorial_actions(request): + """ + The Personal Page tab: Editorial Actions + """ + permission = request.user.groups.filter(name__in=[ + 'Ambassadors', + 'Advisory Board', + 'Editorial Administrators', + 'Editorial College', + 'Vetting Editors', + 'Junior Ambassadors']).exists() + + if not permission: + raise PermissionDenied + + context = {} + contributor = request.user.contributor + + if contributor.is_SP_Admin(): + # count the number of pending registration requests + context['nr_reg_to_vet'] = Contributor.objects.awaiting_vetting().count() + context['nr_reg_awaiting_validation'] = Contributor.objects.awaiting_validation().count() + context['nr_submissions_to_assign'] = Submission.objects.prescreening().count() + context['nr_recommendations_to_prepare_for_voting'] = EICRecommendation.objects.filter( + submission__status='voting_in_preparation').count() + + if contributor.is_VE(): + context['nr_commentary_page_requests_to_vet'] = (Commentary.objects.awaiting_vetting() + .exclude(requested_by=contributor).count()) + context['nr_comments_to_vet'] = Comment.objects.awaiting_vetting().count() + context['nr_thesislink_requests_to_vet'] = ThesisLink.objects.awaiting_vetting().count() + context['nr_authorship_claims_to_vet'] = AuthorshipClaim.objects.awaiting_vetting().count() + + if contributor.is_MEC(): + context['nr_assignments_to_consider'] = contributor.editorial_assignments.open().count() + context['active_assignments'] = contributor.editorial_assignments.ongoing() + context['nr_reports_to_vet'] = Report.objects.awaiting_vetting().filter( + submission__editor_in_charge=contributor).count() + + if contributor.is_EdCol_Admin(): + context['nr_reports_without_pdf'] = Report.objects.accepted().filter(pdf_report='').count() + context['nr_treated_submissions_without_pdf'] = Submission.objects.treated().filter( + pdf_refereeing_pack='').count() + + return render(request, 'partials/scipost/personal_page/editorial_actions.html', context) + + +@permission_required('scipost.can_referee', return_403=True) +@user_passes_test(has_contributor) +def _personal_page_refereeing(request): + """ + The Personal Page tab: Refereeing + """ + context = { + 'contributor': request.user.contributor + } + return render(request, 'partials/scipost/personal_page/refereeing.html', context) + + +@login_required +@user_passes_test(has_contributor) +def _personal_page_publications(request): + """ + The Personal Page tab: Publications + """ + contributor = request.user.contributor + context = { + 'contributor': contributor, + 'own_publications': contributor.publications.order_by('-publication_date') + } + context['nr_publication_authorships_to_claim'] = Publication.objects.filter( + author_list__contains=request.user.last_name).exclude( + authors=contributor).exclude( + authors_claims=contributor).exclude( + authors_false_claims=contributor).count() + return render(request, 'partials/scipost/personal_page/publications.html', context) + + +@login_required +@user_passes_test(has_contributor) +def _personal_page_submissions(request): + """ + The Personal Page tab: Submissions + """ + contributor = request.user.contributor + context = {'contributor': contributor} + + context['nr_submission_authorships_to_claim'] = Submission.objects.filter( + author_list__contains=request.user.last_name).exclude( + authors=contributor).exclude( + authors_claims=contributor).exclude( + authors_false_claims=contributor).count() + context['own_submissions'] = contributor.submissions.filter( + is_current=True).order_by('-submission_date') + return render(request, 'partials/scipost/personal_page/submissions.html', context) + + +@login_required +@user_passes_test(has_contributor) +def _personal_page_commentaries(request): + """ + The Personal Page tab: Commentaries + """ + contributor = request.user.contributor + context = {'contributor': contributor} + + context['nr_commentary_authorships_to_claim'] = Commentary.objects.filter( + author_list__contains=request.user.last_name).exclude( + authors=contributor).exclude( + authors_claims=contributor).exclude( + authors_false_claims=contributor).count() + context['own_submissions'] = contributor.commentaries.order_by('-latest_activity') + return render(request, 'partials/scipost/personal_page/commentaries.html', context) + + +@login_required +@user_passes_test(has_contributor) +def _personal_page_theses(request): + """ + The Personal Page tab: Theses + """ + contributor = request.user.contributor + context = {'contributor': contributor} + + context['nr_thesis_authorships_to_claim'] = ThesisLink.objects.filter( + author__contains=request.user.last_name).exclude( + author_as_cont=contributor).exclude( + author_claims=contributor).exclude( + author_false_claims=contributor).count() + context['own_thesislinks'] = contributor.theses.all() + return render(request, 'partials/scipost/personal_page/theses.html', context) + + +@login_required +@user_passes_test(has_contributor) +def _personal_page_comments(request): + """ + The Personal Page tab: Comments + """ + contributor = request.user.contributor + context = { + 'contributor': contributor, + 'own_comments': contributor.comments.regular_comments().order_by('-date_submitted') + } + + return render(request, 'partials/scipost/personal_page/comments.html', context) + + +@login_required +@user_passes_test(has_contributor) +def _personal_page_author_replies(request): + """ + The Personal Page tab: Author Replies + """ + contributor = request.user.contributor + context = { + 'contributor': contributor, + 'own_authorreplies': contributor.comments.author_replies().order_by('-date_submitted'), + } + + return render(request, 'partials/scipost/personal_page/author_replies.html', context) + + +@login_required +def personal_page(request, tab='account'): """ The Personal Page is the main view for accessing user functions. """ + if request.is_ajax(): + if tab == 'account': + return _personal_page_editorial_account(request) + elif tab == 'editorial_actions': + return _personal_page_editorial_actions(request) + elif tab == 'refereeing': + return _personal_page_refereeing(request) + elif tab == 'publications': + return _personal_page_publications(request) + elif tab == 'submissions': + return _personal_page_submissions(request) + elif tab == 'commentaries': + return _personal_page_commentaries(request) + elif tab == 'theses': + return _personal_page_theses(request) + elif tab == 'comments': + return _personal_page_comments(request) + elif tab == 'author_replies': + return _personal_page_author_replies(request) + raise Http404 + context = { 'appellation': str(request.user), 'needs_validation': False, + 'tab': tab, } + try: contributor = Contributor.objects.select_related('user').get(user=request.user) context['needs_validation'] = contributor.status != CONTRIBUTOR_NORMAL @@ -730,127 +933,14 @@ def personal_page(request): contributor = None if contributor: - # Compile the unavailability periods: - now = timezone.now() - unavailabilities = contributor.unavailability_periods.exclude(end__lt=now).order_by('start') - unavailability_form = UnavailabilityPeriodForm() - - # if an editor, count the number of actions required: - nr_reg_to_vet = 0 - nr_reg_awaiting_validation = 0 - nr_submissions_to_assign = 0 - nr_recommendations_to_prepare_for_voting = 0 - if contributor.is_SP_Admin(): - # count the number of pending registration requests - nr_reg_to_vet = Contributor.objects.awaiting_vetting().count() - nr_reg_awaiting_validation = (Contributor.objects.awaiting_validation() - .count()) - nr_submissions_to_assign = Submission.objects.prescreening().count() - nr_recommendations_to_prepare_for_voting = EICRecommendation.objects.filter( - submission__status='voting_in_preparation').count() - - nr_assignments_to_consider = 0 - active_assignments = None - nr_reports_to_vet = 0 - if contributor.is_MEC(): - nr_assignments_to_consider = (contributor.editorial_assignments - .open().count()) - active_assignments = contributor.editorial_assignments.ongoing() - nr_reports_to_vet = (Report.objects.awaiting_vetting() - .filter(submission__editor_in_charge=contributor).count()) - - nr_commentary_page_requests_to_vet = 0 - nr_comments_to_vet = 0 - nr_thesislink_requests_to_vet = 0 - nr_authorship_claims_to_vet = 0 - if contributor.is_VE(): - nr_commentary_page_requests_to_vet = (Commentary.objects.awaiting_vetting() - .exclude(requested_by=contributor).count()) - nr_comments_to_vet = Comment.objects.awaiting_vetting().count() - nr_thesislink_requests_to_vet = ThesisLink.objects.awaiting_vetting().count() - nr_authorship_claims_to_vet = AuthorshipClaim.objects.awaiting_vetting().count() - # Refereeing - nr_ref_inv_to_consider = contributor.referee_invitations.open().count() - pending_ref_tasks = contributor.referee_invitations.in_process() - refereeing_tab_total_count = nr_ref_inv_to_consider + len(pending_ref_tasks) + refereeing_tab_total_count = contributor.referee_invitations.open().count() + refereeing_tab_total_count += contributor.referee_invitations.in_process().count() refereeing_tab_total_count += contributor.reports.in_draft().count() - # Verify if there exist objects authored by this contributor, - # whose authorship hasn't been claimed yet - own_publications = contributor.publications.order_by('-publication_date') - own_submissions = contributor.submissions.filter(is_current=True).order_by('-submission_date') - own_commentaries = contributor.commentaries.order_by('-latest_activity') - own_thesislinks = contributor.theses.all() - nr_publication_authorships_to_claim = (Publication.objects.filter( - author_list__contains=contributor.user.last_name) - .exclude(authors=contributor) - .exclude(authors_claims=contributor) - .exclude(authors_false_claims=contributor) - .count()) - nr_submission_authorships_to_claim = (Submission.objects.filter( - author_list__contains=contributor.user.last_name) - .exclude(authors=contributor) - .exclude(authors_claims=contributor) - .exclude(authors_false_claims=contributor) - .count()) - nr_commentary_authorships_to_claim = (Commentary.objects.filter( - author_list__contains=contributor.user.last_name) - .exclude(authors=contributor) - .exclude(authors_claims=contributor) - .exclude(authors_false_claims=contributor) - .count()) - nr_thesis_authorships_to_claim = (ThesisLink.objects.filter( - author__contains=contributor.user.last_name) - .exclude(author_as_cont=contributor) - .exclude(author_claims=contributor) - .exclude(author_false_claims=contributor) - .count()) - own_comments = (contributor.comments.regular_comments() - .select_related('author', 'submission') - .order_by('-date_submitted')) - own_authorreplies = (contributor.comments.author_replies() - .order_by('-date_submitted')) - - appellation = contributor.get_title_display() + ' ' + contributor.user.last_name - - context.update({ - 'contributor': contributor, - 'appellation': appellation, - 'unavailabilities': unavailabilities, - 'unavailability_form': unavailability_form, - 'nr_reg_to_vet': nr_reg_to_vet, - 'nr_reg_awaiting_validation': nr_reg_awaiting_validation, - 'nr_commentary_page_requests_to_vet': nr_commentary_page_requests_to_vet, - 'nr_comments_to_vet': nr_comments_to_vet, - 'nr_thesislink_requests_to_vet': nr_thesislink_requests_to_vet, - 'nr_authorship_claims_to_vet': nr_authorship_claims_to_vet, - 'nr_reports_to_vet': nr_reports_to_vet, - 'nr_submissions_to_assign': nr_submissions_to_assign, - 'nr_recommendations_to_prepare_for_voting': nr_recommendations_to_prepare_for_voting, - 'nr_assignments_to_consider': nr_assignments_to_consider, - 'active_assignments': active_assignments, - 'nr_publication_authorships_to_claim': nr_publication_authorships_to_claim, - 'nr_submission_authorships_to_claim': nr_submission_authorships_to_claim, - 'nr_commentary_authorships_to_claim': nr_commentary_authorships_to_claim, - 'nr_thesis_authorships_to_claim': nr_thesis_authorships_to_claim, - 'nr_ref_inv_to_consider': nr_ref_inv_to_consider, - 'pending_ref_tasks': pending_ref_tasks, - 'refereeing_tab_total_count': refereeing_tab_total_count, - 'own_publications': own_publications, - 'own_submissions': own_submissions, - 'own_commentaries': own_commentaries, - 'own_thesislinks': own_thesislinks, - 'own_comments': own_comments, - 'own_authorreplies': own_authorreplies, - }) - - # Only add variables if user has right permission - if request.user.has_perm('scipost.can_manage_reports'): - context['nr_reports_without_pdf'] = (Report.objects.accepted() - .filter(pdf_report='').count()) - context['nr_treated_submissions_without_pdf'] = (Submission.objects.treated() - .filter(pdf_refereeing_pack='').count()) + context['refereeing_tab_total_count'] = refereeing_tab_total_count + context['appellation'] = contributor.get_title_display() + ' ' + contributor.user.last_name + context['contributor'] = contributor return render(request, 'scipost/personal_page.html', context) diff --git a/webpack.config.js b/webpack.config.js index b27be106e76544fa453dadb207f296cebe238ad2..6a9275d4de51bfd576ea29122e1eb64da64ec829 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -10,6 +10,7 @@ module.exports = { entry: { main: [ "bootstrap-loader", + "./scipost/static/scipost/assets/js/dynamic_loading.js", "./scipost/static/scipost/assets/js/scripts.js", ], homepage: [