diff --git a/judge/views/contests.py b/judge/views/contests.py index 9fb4273..414a650 100644 --- a/judge/views/contests.py +++ b/judge/views/contests.py @@ -149,16 +149,20 @@ class ContestList( def get(self, request, *args, **kwargs): self.contest_query = None self.org_query = [] + self.show_orgs = 0 + if request.GET.get("show_orgs"): + self.show_orgs = 1 if "orgs" in self.request.GET and self.request.profile: try: self.org_query = list(map(int, request.GET.getlist("orgs"))) - self.org_query = [ - i - for i in self.org_query - if i - in self.request.profile.organizations.values_list("id", flat=True) - ] + if not self.request.user.is_superuser: + self.org_query = [ + i + for i in self.org_query + if i + in self.request.profile.organizations.values_list("id", flat=True) + ] except ValueError: pass @@ -181,6 +185,8 @@ class ContestList( ) if not self.org_query and self.request.organization: self.org_query = [self.request.organization.id] + if self.show_orgs: + queryset = queryset.filter(organizations=None) if self.org_query: queryset = queryset.filter(organizations__in=self.org_query) @@ -227,8 +233,12 @@ class ContestList( context["first_page_href"] = "." context["contest_query"] = self.contest_query context["org_query"] = self.org_query + context["show_orgs"] = int(self.show_orgs) if self.request.profile: - context["organizations"] = self.request.profile.organizations.all() + if self.request.user.is_superuser: + context["organizations"] = Organization.objects.all() + else: + context["organizations"] = self.request.profile.organizations.all() context["page_type"] = "list" context.update(self.get_sort_context()) context.update(self.get_sort_paginate_context()) diff --git a/templates/contest/list.html b/templates/contest/list.html index 94ec439..7d406d4 100644 --- a/templates/contest/list.html +++ b/templates/contest/list.html @@ -18,6 +18,10 @@ padding-bottom: 1em; } + #show-btn { + margin-top: 0.5em; + } + {% if page_obj and page_obj.number > 1%} #ongoing-table { display: none; @@ -71,6 +75,10 @@