diff --git a/src/apps/api/serializers/leaderboards.py b/src/apps/api/serializers/leaderboards.py index 1e33863a1..f49e7c8df 100644 --- a/src/apps/api/serializers/leaderboards.py +++ b/src/apps/api/serializers/leaderboards.py @@ -103,11 +103,15 @@ def get_submissions(self, instance): primary_col = instance.columns.get(index=instance.primary_index) # Order first by primary column. Then order by other columns after for tie breakers. ordering = [f'{"-" if primary_col.sorting == "desc" else ""}primary_col'] - submissions = Submission.objects.filter(leaderboard=instance, is_specific_task_re_run=False)\ - .select_related('owner').prefetch_related('scores')\ + submissions = ( + Submission.objects.filter( + leaderboard=instance, + is_specific_task_re_run=False + ) + .select_related('owner') + .prefetch_related('scores') .annotate(primary_col=Sum('scores__score', filter=Q(scores__column=primary_col))) - # TODO: Look at why we have primary_col in the above annotation - + ) for column in instance.columns.exclude(id=primary_col.id).order_by('index'): col_name = f'col{column.index}' ordering.append(f'{"-" if column.sorting == "desc" else ""}{col_name}') @@ -154,16 +158,24 @@ def get_submissions(self, instance): # asc == colname primary_col = instance.leaderboard.columns.get(index=instance.leaderboard.primary_index) ordering = [f'{"-" if primary_col.sorting == "desc" else ""}primary_col'] - submissions = Submission.objects.filter( - phase=instance, - is_soft_deleted=False, - has_children=False, - is_specific_task_re_run=False, - leaderboard__isnull=False, ) \ - .select_related('owner').prefetch_related('scores') \ + submissions = ( + Submission.objects.filter( + phase=instance, + is_soft_deleted=False, + has_children=False, + is_specific_task_re_run=False, + leaderboard=instance.leaderboard, + ) + .select_related('owner') + .prefetch_related('scores', 'scores__column') .annotate(primary_col=Sum('scores__score', filter=Q(scores__column=primary_col))) - - for column in instance.leaderboard.columns.exclude(id=primary_col.id, hidden=False).order_by('index'): + ) + for column in ( + instance.leaderboard.columns + .filter(hidden=False) + .exclude(id=primary_col.id) + .order_by('index') + ): col_name = f'col{column.index}' ordering.append(f'{"-" if column.sorting == "desc" else ""}{col_name}') kwargs = { diff --git a/src/apps/api/views/competitions.py b/src/apps/api/views/competitions.py index 2a09bf8c5..09eeb2491 100644 --- a/src/apps/api/views/competitions.py +++ b/src/apps/api/views/competitions.py @@ -754,7 +754,7 @@ def rerun_submissions(self, request, pk): raise PermissionDenied(error_message) @swagger_auto_schema(responses={200: PhaseResultsSerializer}) - @action(detail=True, methods=['GET']) + @action(detail=True, methods=['GET'], permission_classes=[AllowAny]) def get_leaderboard(self, request, pk): phase = self.get_object() if phase.competition.fact_sheet: diff --git a/src/apps/api/views/submissions.py b/src/apps/api/views/submissions.py index afe14fb36..0c1fbf733 100644 --- a/src/apps/api/views/submissions.py +++ b/src/apps/api/views/submissions.py @@ -117,7 +117,28 @@ def get_queryset(self): qs = super().get_queryset() if self.request.method == 'GET': if not self.request.user.is_authenticated: - return Submission.objects.none() + # Show leaderboard submissions to unauthenticated users + return ( + qs.filter( + leaderboard__isnull=False, + is_soft_deleted=False, + status=Submission.FINISHED, + ) + .select_related( + 'phase', + 'phase__competition', + 'participant', + 'participant__user', + 'owner', + 'data', + ) + .prefetch_related( + 'children', + 'scores', + 'scores__column', + 'task', + ) + ) # Check if admin is requesting to see soft-deleted submissions show_is_soft_deleted = self.request.query_params.get('show_is_soft_deleted', 'false').lower() == 'true' diff --git a/src/static/riot/competitions/detail/_registration.tag b/src/static/riot/competitions/detail/_registration.tag index c79bb7f62..b03f3dfa8 100644 --- a/src/static/riot/competitions/detail/_registration.tag +++ b/src/static/riot/competitions/detail/_registration.tag @@ -1,43 +1,43 @@ -
-
-
-

- You have not yet registered for this competition. -

-

- To participate in this competition, you must accept its specific - terms and conditions. - This competition does not - require approval, once you register, you will immediately be able to participate. -

- -

- This competition requires approval from the competition organizers. After - submitting your registration request, an email - will be sent to the competition organizers notifying them of your request. Your application will - remain pending until they - approve or deny it. -

-
-
- +
+
-
- - +
+

You have not yet registered for this competition.

+

+ To participate in this competition, you must accept its specific + terms and conditions. + This competition does not + require approval, once you register, you will immediately be able to participate. +

+ +

+ This competition requires approval from the competition organizers. After + submitting your registration request, an email + will be sent to the competition organizers notifying them of your request. Your application will + remain pending until they + approve or deny it. +

-
- -
- -
-
- Log In or - Sign Up to register for this competition. + +
+
+ + +
+
+
+ +
+
+
+
+ Log In or + Sign Up to register for this competition. +
diff --git a/src/static/riot/competitions/detail/_tabs.tag b/src/static/riot/competitions/detail/_tabs.tag index 95fe2d285..02dffe668 100644 --- a/src/static/riot/competitions/detail/_tabs.tag +++ b/src/static/riot/competitions/detail/_tabs.tag @@ -173,15 +173,7 @@
-
-
-
- Log In or - Sign Up to view this competition results. -
-
-
-
+
Date ID {column.title} - - - - - - You are not a participant of this competition. Please register in My Submissions tab to view the leaderboard. - - - - - - - - Your request to participate in this competition is waiting for an approval from the competition organizer. - - - - - - - - Your request to participate in this competition is denied. Please contact the competition organizer for more details. - - - - - + + No submissions have been added to this leaderboard yet!