From 004b586e2d4f607dd349b225713ec5fd68f078c0 Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Thu, 6 Jun 2024 10:54:56 +0200 Subject: [PATCH] The most basic of 'onboarding', as it pertains to teams --- bugsink/views.py | 2 +- teams/urls.py | 1 + teams/views.py | 19 ++++++++++++++----- theme/templates/base.html | 15 ++------------- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/bugsink/views.py b/bugsink/views.py index 261a181..bc0a999 100644 --- a/bugsink/views.py +++ b/bugsink/views.py @@ -13,7 +13,7 @@ def home(request): project_count = request.user.project_set.all().count() if project_count == 0: - raise NotImplementedError("Onboarding not implemented yet") + return redirect("team_list") elif project_count == 1: project = request.user.project_set.get() diff --git a/teams/urls.py b/teams/urls.py index 7234693..45591f6 100644 --- a/teams/urls.py +++ b/teams/urls.py @@ -6,6 +6,7 @@ from .views import ( urlpatterns = [ path('', team_list, name="team_list"), + path('mine/', team_list, kwargs={"ownership_filter": "mine"}, name="team_list_mine"), path('other/', team_list, kwargs={"ownership_filter": "other"}, name="team_list_other"), path('new/', team_new, name="team_new"), path('/edit/', team_edit, name="team_edit"), diff --git a/teams/views.py b/teams/views.py index d951779..f0d4961 100644 --- a/teams/views.py +++ b/teams/views.py @@ -22,7 +22,18 @@ from .tasks import send_team_invite_email, send_team_invite_email_new_user User = get_user_model() -def team_list(request, ownership_filter="mine"): +def team_list(request, ownership_filter=None): + my_memberships = TeamMembership.objects.filter(user=request.user) + my_teams = Team.objects.filter(teammembership__in=my_memberships) + other_teams = Team.objects.exclude(teammembership__in=my_memberships).distinct() # TODO visibility-check + + if ownership_filter is None: + # if no tab is provided, we redirect to the most informative one. generally we prefer "mine", but not when empty + if my_teams.exists() or not other_teams.exists(): + # "or not other": if there are no teams at all, an empty "mine" is more informative than an empty "other" + return redirect('team_list_mine') + return redirect('team_list_other') + if request.method == 'POST': full_action_str = request.POST.get('action') action, team_pk = full_action_str.split(":", 1) @@ -37,12 +48,10 @@ def team_list(request, ownership_filter="mine"): TeamMembership.objects.create(team_id=team_pk, user_id=request.user.id, role=TeamRole.MEMBER, accepted=True) return redirect('team_member_settings', team_pk=team_pk, user_pk=request.user.id) - my_memberships = TeamMembership.objects.filter(user=request.user) - if ownership_filter == "mine": - base_qs = Team.objects.filter(teammembership__in=my_memberships) + base_qs = my_teams elif ownership_filter == "other": - base_qs = Team.objects.exclude(teammembership__in=my_memberships).distinct() + base_qs = other_teams else: raise ValueError("Invalid ownership_filter") diff --git a/theme/templates/base.html b/theme/templates/base.html index 94e0441..ec19be3 100644 --- a/theme/templates/base.html +++ b/theme/templates/base.html @@ -15,19 +15,6 @@
{{ site_title }}
- {# TODO how to handle single-org, single-project #} - - - - +
Teams
+
{% if user.is_staff %}
Admin