diff --git a/portal/settings.py b/portal/settings.py index 57411d4..40787b3 100644 --- a/portal/settings.py +++ b/portal/settings.py @@ -62,6 +62,7 @@ "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", "allauth.account.middleware.AccountMiddleware", + "portal_account.middleware.TOSRedirectMiddleware", ] ROOT_URLCONF = "portal.urls" diff --git a/portal/views.py b/portal/views.py index 32d8fdb..8cfb441 100644 --- a/portal/views.py +++ b/portal/views.py @@ -1,15 +1,6 @@ -from django.shortcuts import redirect, render +from django.shortcuts import render def index(request): - """Redirect to profile creation page if user has not completed their profile.""" - context = {} - from portal_account.models import PortalProfile - - if ( - request.user - and request.user.is_authenticated - and not PortalProfile.objects.filter(user=request.user).exists() - ): - return redirect("portal_account:portal_profile_new") - return render(request, "portal/index.html", context) + """Display the index page for all users.""" + return render(request, "portal/index.html") diff --git a/portal_account/forms.py b/portal_account/forms.py index e56ab6b..eb110d4 100644 --- a/portal_account/forms.py +++ b/portal_account/forms.py @@ -10,8 +10,8 @@ class PortalProfileForm(ModelForm): first_name = forms.CharField() last_name = forms.CharField() email = forms.CharField(disabled=True) - coc_agreement = forms.BooleanField(disabled=True, required=False) - tos_agreement = forms.BooleanField(disabled=True, required=False) + coc_agreement = forms.BooleanField(required=False) + tos_agreement = forms.BooleanField(required=False) class Meta: model = PortalProfile @@ -32,6 +32,11 @@ def __init__(self, *args, **kwargs): self.fields["first_name"].initial = self.user.first_name self.fields["last_name"].initial = self.user.last_name + if self.instance.pk: + if self.instance.coc_agreement and self.instance.tos_agreement: + self.fields["coc_agreement"].disabled = True + self.fields["tos_agreement"].disabled = True + # fix field order self.order_fields( [ diff --git a/portal_account/middleware.py b/portal_account/middleware.py new file mode 100644 index 0000000..3cd5502 --- /dev/null +++ b/portal_account/middleware.py @@ -0,0 +1,37 @@ +from django.shortcuts import redirect + + +class TOSRedirectMiddleware: + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + if not request.user.is_authenticated: + return self.get_response(request) + + excluded_path_prefixes = [ + "/admin/", + "/accounts/", + "/portal_account/profile/new", + "/portal_account/profile/edit/", + "/portal_account/profile/view/", + "/volunteer/", + ] + + current_path = request.path + if any(current_path.startswith(prefix) for prefix in excluded_path_prefixes): + return self.get_response(request) + + try: + from portal_account.models import PortalProfile + + profile = PortalProfile.objects.get(user=request.user) + + if not profile.tos_agreement: + profile_edit_url = profile.get_absolute_url() + if current_path != profile_edit_url: + return redirect(profile_edit_url) + except PortalProfile.DoesNotExist: + return redirect("portal_account:portal_profile_new") + + return self.get_response(request) diff --git a/templates/portal_account/portalprofile_edit.html b/templates/portal_account/portalprofile_edit.html index bbffbb2..8f73ef1 100644 --- a/templates/portal_account/portalprofile_edit.html +++ b/templates/portal_account/portalprofile_edit.html @@ -15,14 +15,27 @@