updated middleware, started on conditional modal

This commit is contained in:
David Kennedy 2024-06-06 16:27:24 -04:00
parent f468e6cd6e
commit ff7a745ffa
No known key found for this signature in database
GPG key ID: 6528A5386E66B96B
3 changed files with 90 additions and 4 deletions

View file

@ -5,6 +5,7 @@ Contains middleware used in settings.py
from urllib.parse import parse_qs from urllib.parse import parse_qs
from django.urls import reverse from django.urls import reverse
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from registrar.models.user import User
from waffle.decorators import flag_is_active from waffle.decorators import flag_is_active
from registrar.models.utility.generic_helper import replace_url_queryparams from registrar.models.utility.generic_helper import replace_url_queryparams
@ -38,11 +39,16 @@ class CheckUserProfileMiddleware:
self.get_response = get_response self.get_response = get_response
self.setup_page = reverse("finish-user-profile-setup") self.setup_page = reverse("finish-user-profile-setup")
self.profile_page = reverse("user-profile")
self.logout_page = reverse("logout") self.logout_page = reverse("logout")
self.excluded_pages = [ self.regular_excluded_pages = [
self.setup_page, self.setup_page,
self.logout_page, self.logout_page,
] ]
self.other_excluded_pages = [
self.profile_page,
self.logout_page,
]
def __call__(self, request): def __call__(self, request):
response = self.get_response(request) response = self.get_response(request)
@ -60,13 +66,17 @@ class CheckUserProfileMiddleware:
return None return None
if request.user.is_authenticated: if request.user.is_authenticated:
if hasattr(request.user, "finished_setup") and not request.user.finished_setup: if request.user.verification_type == User.VerificationTypeChoices.REGULAR:
return self._handle_setup_not_finished(request) if hasattr(request.user, "finished_setup") and not request.user.finished_setup:
return self._handle_regular_user_setup_not_finished(request)
else:
if hasattr(request.user, "finished_setup") and not request.user.finished_setup:
return self._handle_other_user_setup_not_finished(request)
# Continue processing the view # Continue processing the view
return None return None
def _handle_setup_not_finished(self, request): def _handle_regular_user_setup_not_finished(self, request):
"""Redirects the given user to the finish setup page. """Redirects the given user to the finish setup page.
We set the "redirect" query param equal to where the user wants to go. We set the "redirect" query param equal to where the user wants to go.
@ -98,3 +108,14 @@ class CheckUserProfileMiddleware:
else: else:
# Process the view as normal # Process the view as normal
return None return None
def _handle_other_user_setup_not_finished(self, request):
"""Redirects the given user to the profile page to finish setup.
"""
# Don't redirect on excluded pages (such as the setup page itself)
if not any(request.path.startswith(page) for page in self.excluded_pages):
return HttpResponseRedirect(self.profile_page)
else:
# Process the view as normal
return None

View file

@ -36,6 +36,68 @@ Edit your User Profile |
</a> </a>
{% endif %} {% endif %}
{% if show_confirmation_modal %}
<div class="usa-modal__content">
<div class="usa-modal__main">
<h2 class="usa-modal__heading" id="modal-1-heading">
{{ modal_heading }}
{% if heading_value is not None %}
{# Add a breakpoint #}
<div aria-hidden="true"></div>
{{ heading_value }}
{% endif %}
</h2>
<div class="usa-prose">
<p id="modal-1-description">
{{ modal_description }}
</p>
</div>
<div class="usa-modal__footer">
<ul class="usa-button-group">
{% if not_form %}
<li class="usa-button-group__item">
{{ modal_button }}
</li>
{% else %}
<li class="usa-button-group__item">
<form method="post">
{% csrf_token %}
{{ modal_button }}
</form>
</li>
{% endif %}
<li class="usa-button-group__item">
{% comment %} The cancel button the DS form actually triggers a context change in the view,
in addition to being a close modal hook {% endcomment %}
{% if cancel_button_resets_ds_form %}
<form method="post">
{% csrf_token %}
<button
type="submit"
class="usa-button usa-button--unstyled padding-105 text-center"
name="btn-cancel-click"
data-close-modal
>
Cancel
</button>
</form>
{% elif not is_domain_request_form or review_form_is_complete %}
<button
type="button"
class="usa-button usa-button--unstyled padding-105 text-center"
data-close-modal
>
Cancel
</button>
{% endif %}
</li>
</ul>
</div>
</div>
</div>
{% endif %}
{% endblock content %} {% endblock content %}
{% block content_bottom %} {% block content_bottom %}

View file

@ -41,6 +41,9 @@ class UserProfileView(UserProfilePermissionView, FormMixin):
form = self.form_class(instance=self.object) form = self.form_class(instance=self.object)
context = self.get_context_data(object=self.object, form=form) context = self.get_context_data(object=self.object, form=form)
if hasattr(self.object, "finished_setup") and not self.object.finished_setup:
context["show_confirmation_modal"]
return_to_request = request.GET.get("return_to_request") return_to_request = request.GET.get("return_to_request")
if return_to_request: if return_to_request:
context["return_to_request"] = True context["return_to_request"] = True