diff --git a/scipost/templates/scipost/personal_page.html b/scipost/templates/scipost/personal_page.html index 151c11eb9e901a98ddaf2ab62aa65d523e5e31aa..2506e6f5f49f8fddd69695fc4e08fee6b2a39079 100644 --- a/scipost/templates/scipost/personal_page.html +++ b/scipost/templates/scipost/personal_page.html @@ -87,7 +87,7 @@ {% block content %} -{% if not request.user|is_in_group:'Registered Contributors' %} +{% if 'Registered Contributors' not in user_groups %} <div class="row"> <div class="col-12"> <hr class="hr12"> @@ -110,7 +110,7 @@ <div class="col-12"> <ul class="personalTabMenu"> <li><a class="TabItem" id="AccountTab">Account</a></li> - {% if request.user|is_in_group:'Editorial Administrators' or request.user|is_in_group:'Advisory Board' or request.user|is_in_group:'Editorial College' or request.user|is_in_group:'Vetting Editors' or request.user|is_in_group:'Ambassadors' or request.user|is_in_group:'Junior Ambassadors' %} + {% if 'Editorial Administrators' not in user_groups or 'Advisory Board' not in user_groups or 'Editorial College' not in user_groups or 'Vetting Editors' not in user_groups or 'Ambassadors' not in user_groups or 'Junior Ambassadors' not in user_groups %} <li><a class="TabItem" id="EdActionTab">Editorial Actions</a></li> {% endif %} <li><a class="TabItem" id="RefereeingTab">Refereeing</a></li> @@ -119,13 +119,13 @@ <li><a class="TabItem" id="ThesesTab">Theses</a></li> <li><a class="TabItem" id="CommentsTab">Comments</a></li> <li><a class="TabItem" id="AuthorRepliesTab">Author Replies</a></li> - {% if request.user|is_in_group:'Testers' %} + {% if 'Testers' in user_groups %} <li><a class="TabItem" id="ListsTab">Lists</a></li> {% endif %} - {% if request.user|is_in_group:'Testers' %} + {% if 'Testers' in user_groups %} <li><a class="TabItem" id="TeamsTab">Teams</a></li> {% endif %} - {% if request.user|is_in_group:'Testers' %} + {% if 'Testers' in user_groups %} <li><a class="TabItem" id="GraphsTab">Graphs</a></li> {% endif %} </ul> @@ -160,31 +160,31 @@ {% endif %} </div> <div class="col-md-6"> - {% if request.user|is_in_group:'SciPost Administrators' %} + {% if 'SciPost Administrators' in user_groups %} <h3>You are a SciPost Administrator.</h3> {% endif %} - {% if request.user|is_in_group:'Editorial Administrators' %} + {% if 'Editorial Administrators' in user_groups %} <h3>You are a SciPost Editorial Administrator.</h3> {% endif %} - {% if request.user|is_in_group:'Advisory Board' %} + {% if 'Advisory Board' in user_groups %} <h3>You are a member of the Advisory Board.</h3> {% endif %} - {% if request.user|is_in_group:'Editorial College' %} + {% if 'Editorial College' in user_groups %} <h3>You are a member of the Editorial College.</h3> {% endif %} - {% if request.user|is_in_group:'Vetting Editors' %} + {% if 'Vetting Editors' in user_groups %} <h3>You are a SciPost Vetting Editor.</h3> {% endif %} - {% if request.user|is_in_group:'Registered Contributors' %} + {% if 'Registered Contributors' in user_groups %} <h3>You are a Registered Contributor.</h3> {% endif %} - {% if request.user|is_in_group:'Testers' %} + {% if 'Testers' in user_groups %} <h3>You are a SciPost Tester.</h3> {% endif %} - {% if request.user|is_in_group:'Ambassadors' %} + {% if 'Ambassadors' in user_groups %} <h3>You are a SciPost Ambassador.</h3> {% endif %} - {% if request.user|is_in_group:'Junior Ambassadors' %} + {% if 'Junior Ambassadors' in user_groups %} <h3>You are a SciPost Junior Ambassador.</h3> {% endif %} @@ -239,7 +239,7 @@ </div> -{% if request.user|is_in_group:'SciPost Administrators' or request.user|is_in_group:'Editorial Administrators' or request.user|is_in_group:'Editorial College' or request.user|is_in_group:'Vetting Editors' or request.user|is_in_group:'Ambassadors' or request.user|is_in_group:'Junior Ambassadors' %} +{% if 'SciPost Administrators' in user_groups or 'Editorial Administrators' in user_groups or 'Editorial College' in user_groups or 'Vetting Editors' in user_groups or 'Ambassadors' in user_groups or 'Junior Ambassadors' in user_groups %} <div class="TabSection" id="EdActions"> <div class="row"> @@ -251,7 +251,7 @@ </div> <div class="row"> - {% if request.user|is_in_group:'SciPost Administrators' or request.user|is_in_group:'Advisory Board' or request.user|is_in_group:'Ambassadors' or request.user|is_in_group:'Junior Ambassadors' %} + {% if 'SciPost Administrators' in user_groups or 'Advisory Board' in user_groups or 'Ambassadors' in user_groups or 'Junior Ambassadors' in user_groups %} <div class="col-md-4"> <h3>Registration actions</h3> <ul> @@ -315,7 +315,7 @@ {% endif %} </div> - {% if request.user|is_in_group:'Editorial Administrators' or request.user|is_in_group:'Editorial College' %} + {% if 'Editorial Administrators' in user_groups or 'Editorial College' in user_groups %} <div class="col-md-4"> <h3>Info</h3> <ul> @@ -380,7 +380,7 @@ {% for task in pending_ref_tasks %} <li>{{ task.submission }}, due {{ task.submission.reporting_deadline }}. <a href="{% url 'submissions:submit_report' arxiv_identifier_w_vn_nr=task.submission.arxiv_identifier_w_vn_nr %}">Submit your Report</a> - <a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=task.submission.arxiv_identifier_w_vn_nr comtype='RtoE' referee_id=request.user.contributor.id %}">Write to the Editor-in-charge</a>. + <a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=task.submission.arxiv_identifier_w_vn_nr comtype='RtoE' referee_id=contributor.user.contributor.id %}">Write to the Editor-in-charge</a>. </li> {% endfor %} </ul> @@ -411,7 +411,7 @@ <ul class="mt-3"> {% for sub in own_submissions %} {{ sub.header_as_li_for_authors }} - {% if request.user.contributor == sub.submitted_by %} + {% if contributor.user.contributor == sub.submitted_by %} <p><a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=sub.arxiv_identifier_w_vn_nr comtype='AtoE' %}">Write to the Editor-in-charge</a>.</p> {% endif %} {% endfor %} diff --git a/scipost/templatetags/scipost_extras.py b/scipost/templatetags/scipost_extras.py index 3a34f87e76bc8559d8943d360f43469a14860f95..40863a5f2d987024c06caeb3c480f2477293a174 100644 --- a/scipost/templatetags/scipost_extras.py +++ b/scipost/templatetags/scipost_extras.py @@ -21,8 +21,7 @@ def sort_by(queryset, order): @register.filter(name='is_in_group') def is_in_group(user, group_name): - group = Group.objects.get(name=group_name) - return True if group in user.groups.all() else False + return user.groups.filter(name=group_name).exists() @register.filter(name='associated_contributors') diff --git a/scipost/views.py b/scipost/views.py index bae70ff6fd044e7bd82edca43986b8a76f1e450f..4340413767ecf50684c1963f63327d328c3b35ef 100644 --- a/scipost/views.py +++ b/scipost/views.py @@ -935,137 +935,135 @@ def mark_unavailable_period(request): return redirect('scipost:personal_page') +@login_required def personal_page(request): """ The Personal Page is the main view for accessing user functions. """ - if request.user.is_authenticated(): - contributor = Contributor.objects.get(user=request.user) - - # Compile the unavailability periods: - now = timezone.now() - unavailabilities = UnavailabilityPeriod.objects.filter( - contributor=contributor).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 is_SP_Admin(request.user): - intwodays = now + timezone.timedelta(days=2) - - # count the number of pending registration requests - nr_reg_to_vet = Contributor.objects.filter(user__is_active=True, status=0).count() - nr_reg_awaiting_validation = Contributor.objects.filter( - user__is_active=False, key_expires__gte=now, - key_expires__lte=intwodays, status=0).count() - nr_submissions_to_assign = Submission.objects.filter(status__in=['unassigned']).count() - nr_recommendations_to_prepare_for_voting = EICRecommendation.objects.filter( - submission__status__in=['voting_in_preparation']).count() - nr_assignments_to_consider = 0 - active_assignments = None - nr_reports_to_vet = 0 - if is_MEC(request.user): - nr_assignments_to_consider = (EditorialAssignment.objects - .filter(to=contributor, accepted=None, deprecated=False) + contributor = Contributor.objects.select_related('user').get(user=request.user) + user_groups = contributor.user.groups.values_list('name', flat=True) + + # Compile the unavailability periods: + now = timezone.now() + unavailabilities = UnavailabilityPeriod.objects.filter( + contributor=contributor).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 is_SP_Admin(contributor.user): + intwodays = now + timezone.timedelta(days=2) + + # count the number of pending registration requests + nr_reg_to_vet = Contributor.objects.filter(user__is_active=True, status=0).count() + nr_reg_awaiting_validation = Contributor.objects.filter( + user__is_active=False, key_expires__gte=now, + key_expires__lte=intwodays, status=0).count() + nr_submissions_to_assign = Submission.objects.filter(status__in=['unassigned']).count() + nr_recommendations_to_prepare_for_voting = EICRecommendation.objects.filter( + submission__status__in=['voting_in_preparation']).count() + nr_assignments_to_consider = 0 + active_assignments = None + nr_reports_to_vet = 0 + if is_MEC(contributor.user): + nr_assignments_to_consider = (EditorialAssignment.objects + .filter(to=contributor, accepted=None, deprecated=False) + .count()) + active_assignments = EditorialAssignment.objects.filter( + to=contributor, accepted=True, completed=False) + nr_reports_to_vet = Report.objects.filter( + status=0, 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 is_VE(request.user): + nr_commentary_page_requests_to_vet = Commentary.objects.filter(vetted=False).count() + nr_comments_to_vet = Comment.objects.filter(status=0).count() + nr_thesislink_requests_to_vet = ThesisLink.objects.filter(vetted=False).count() + nr_authorship_claims_to_vet = AuthorshipClaim.objects.filter(status='0').count() + nr_ref_inv_to_consider = RefereeInvitation.objects.filter( + referee=contributor, accepted=None, cancelled=False).count() + pending_ref_tasks = RefereeInvitation.objects.filter( + referee=contributor, accepted=True, fulfilled=False) + # Verify if there exist objects authored by this contributor, + # whose authorship hasn't been claimed yet + own_submissions = (Submission.objects + .filter(authors__in=[contributor], is_current=True) + .order_by('-submission_date')) + own_commentaries = (Commentary.objects + .filter(authors__in=[contributor]) + .order_by('-latest_activity')) + own_thesislinks = ThesisLink.objects.filter(author_as_cont__in=[contributor]) + nr_submission_authorships_to_claim = (Submission.objects.filter( + author_list__contains=contributor.user.last_name) + .exclude(authors__in=[contributor]) + .exclude(authors_claims__in=[contributor]) + .exclude(authors_false_claims__in=[contributor]) .count()) - active_assignments = EditorialAssignment.objects.filter( - to=contributor, accepted=True, completed=False) - nr_reports_to_vet = Report.objects.filter( - status=0, 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 is_VE(request.user): - nr_commentary_page_requests_to_vet = Commentary.objects.filter(vetted=False).count() - nr_comments_to_vet = Comment.objects.filter(status=0).count() - nr_thesislink_requests_to_vet = ThesisLink.objects.filter(vetted=False).count() - nr_authorship_claims_to_vet = AuthorshipClaim.objects.filter(status='0').count() - nr_ref_inv_to_consider = RefereeInvitation.objects.filter( - referee=contributor, accepted=None, cancelled=False).count() - pending_ref_tasks = RefereeInvitation.objects.filter( - referee=contributor, accepted=True, fulfilled=False) - # Verify if there exist objects authored by this contributor, - # whose authorship hasn't been claimed yet - own_submissions = (Submission.objects - .filter(authors__in=[contributor], is_current=True) - .order_by('-submission_date')) - own_commentaries = (Commentary.objects - .filter(authors__in=[contributor]) - .order_by('-latest_activity')) - own_thesislinks = ThesisLink.objects.filter(author_as_cont__in=[contributor]) - nr_submission_authorships_to_claim = (Submission.objects.filter( - author_list__contains=contributor.user.last_name) - .exclude(authors__in=[contributor]) - .exclude(authors_claims__in=[contributor]) - .exclude(authors_false_claims__in=[contributor]) - .count()) - nr_commentary_authorships_to_claim = (Commentary.objects.filter( - author_list__contains=contributor.user.last_name) - .exclude(authors__in=[contributor]) - .exclude(authors_claims__in=[contributor]) - .exclude(authors_false_claims__in=[contributor]) - .count()) - nr_thesis_authorships_to_claim = (ThesisLink.objects.filter( - author__contains=contributor.user.last_name) - .exclude(author_as_cont__in=[contributor]) - .exclude(author_claims__in=[contributor]) - .exclude(author_false_claims__in=[contributor]) + nr_commentary_authorships_to_claim = (Commentary.objects.filter( + author_list__contains=contributor.user.last_name) + .exclude(authors__in=[contributor]) + .exclude(authors_claims__in=[contributor]) + .exclude(authors_false_claims__in=[contributor]) .count()) - own_comments = (Comment.objects - .filter(author=contributor, is_author_reply=False) - .order_by('-date_submitted')) - own_authorreplies = (Comment.objects - .filter(author=contributor, is_author_reply=True) - .order_by('-date_submitted')) - lists_owned = List.objects.filter(owner=contributor) - lists = List.objects.filter(teams_with_access__members__in=[contributor]) - teams_led = Team.objects.filter(leader=contributor) - teams = Team.objects.filter(members__in=[contributor]) - graphs_owned = Graph.objects.filter(owner=contributor) - graphs_private = Graph.objects.filter(Q(teams_with_access__leader=contributor) - | Q(teams_with_access__members__in=[contributor])) - appellation = title_dict[contributor.title] + ' ' + contributor.user.last_name - context = { - '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_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, - 'own_submissions': own_submissions, - 'own_commentaries': own_commentaries, - 'own_thesislinks': own_thesislinks, - 'own_comments': own_comments, 'own_authorreplies': own_authorreplies, - 'lists_owned': lists_owned, - 'lists': lists, - 'teams_led': teams_led, - 'teams': teams, - 'graphs_owned': graphs_owned, - 'graphs_private': graphs_private, - } - return render(request, 'scipost/personal_page.html', context) - else: - form = AuthenticationForm() - context = {'form': form} - return render(request, 'scipost/login.html', context) + nr_thesis_authorships_to_claim = (ThesisLink.objects.filter( + author__contains=contributor.user.last_name) + .exclude(author_as_cont__in=[contributor]) + .exclude(author_claims__in=[contributor]) + .exclude(author_false_claims__in=[contributor]) + .count()) + own_comments = (Comment.objects.select_related('author', 'submission') + .filter(author=contributor, is_author_reply=False) + .order_by('-date_submitted')) + own_authorreplies = (Comment.objects + .filter(author=contributor, is_author_reply=True) + .order_by('-date_submitted')) + lists_owned = List.objects.filter(owner=contributor) + lists = List.objects.filter(teams_with_access__members__in=[contributor]) + teams_led = Team.objects.select_related('leader__user').filter(leader=contributor) + teams = Team.objects.select_related('leader__user').filter(members__in=[contributor]) + graphs_owned = Graph.objects.filter(owner=contributor) + graphs_private = Graph.objects.filter(Q(teams_with_access__leader=contributor) + | Q(teams_with_access__members__in=[contributor])) + appellation = title_dict[contributor.title] + ' ' + contributor.user.last_name + context = { + 'contributor': contributor, + 'user_groups': user_groups, + '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_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, + 'own_submissions': own_submissions, + 'own_commentaries': own_commentaries, + 'own_thesislinks': own_thesislinks, + 'own_comments': own_comments, 'own_authorreplies': own_authorreplies, + 'lists_owned': lists_owned, + 'lists': lists, + 'teams_led': teams_led, + 'teams': teams, + 'graphs_owned': graphs_owned, + 'graphs_private': graphs_private, + } + return render(request, 'scipost/personal_page.html', context) @login_required