forked from CGM_Public/pretix_original
[A11y] Improve customer account pages (#4654)
This commit is contained in:
committed by
GitHub
parent
f4ca9a5681
commit
a1bf7be244
@@ -134,7 +134,7 @@ class LoginView(RedirectBackMixin, FormView):
|
||||
url = self.get_redirect_url()
|
||||
|
||||
if not url:
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.profile', kwargs={})
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.index', kwargs={})
|
||||
|
||||
if self.request.GET.get("request_cross_domain_customer_auth") == "true":
|
||||
otpstore = SessionStore()
|
||||
@@ -350,8 +350,42 @@ class CustomerRequiredMixin:
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
|
||||
class ProfileView(CustomerRequiredMixin, ListView):
|
||||
template_name = 'pretixpresale/organizers/customer_profile.html'
|
||||
class CustomerAccountBaseMixin(CustomerRequiredMixin):
|
||||
def get_context_data(self, **kwargs):
|
||||
ctx = super().get_context_data(**kwargs)
|
||||
ctx['customer'] = self.request.customer
|
||||
url_name = self.request.resolver_match.url_name
|
||||
ctx['sub_nav'] = [
|
||||
{
|
||||
'label': _('Orders'),
|
||||
'url': eventreverse(self.request.organizer, 'presale:organizer.customer.index', kwargs={}),
|
||||
'active': url_name == 'organizer.customer.index',
|
||||
'icon': 'shopping-cart',
|
||||
},
|
||||
{
|
||||
'label': _('Memberships'),
|
||||
'url': eventreverse(self.request.organizer, 'presale:organizer.customer.memberships', kwargs={}),
|
||||
'active': url_name.startswith('organizer.customer.membership'),
|
||||
'icon': 'id-badge',
|
||||
},
|
||||
{
|
||||
'label': _('Addresses'),
|
||||
'url': eventreverse(self.request.organizer, 'presale:organizer.customer.addresses', kwargs={}),
|
||||
'active': url_name.startswith('organizer.customer.address'),
|
||||
'icon': 'address-card-o',
|
||||
},
|
||||
{
|
||||
'label': _('Attendee profiles'),
|
||||
'url': eventreverse(self.request.organizer, 'presale:organizer.customer.profiles', kwargs={}),
|
||||
'active': url_name.startswith('organizer.customer.profile'),
|
||||
'icon': 'user',
|
||||
},
|
||||
]
|
||||
return ctx
|
||||
|
||||
|
||||
class OrderView(CustomerAccountBaseMixin, ListView):
|
||||
template_name = 'pretixpresale/organizers/customer_orders.html'
|
||||
context_object_name = 'orders'
|
||||
paginate_by = 20
|
||||
|
||||
@@ -369,18 +403,6 @@ class ProfileView(CustomerRequiredMixin, ListView):
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
ctx = super().get_context_data(**kwargs)
|
||||
ctx['customer'] = self.request.customer
|
||||
ctx['memberships'] = self.request.customer.memberships.with_usages().select_related(
|
||||
'membership_type', 'granted_in', 'granted_in__order', 'granted_in__order__event'
|
||||
)
|
||||
ctx['invoice_addresses'] = InvoiceAddress.profiles.filter(customer=self.request.customer)
|
||||
ctx['is_paginated'] = True
|
||||
|
||||
for m in ctx['memberships']:
|
||||
if m.membership_type.max_usages:
|
||||
m.percent = int(m.usages / m.membership_type.max_usages * 100)
|
||||
else:
|
||||
m.percent = 0
|
||||
|
||||
s = OrderPosition.objects.filter(
|
||||
order=OuterRef('pk')
|
||||
@@ -404,7 +426,18 @@ class ProfileView(CustomerRequiredMixin, ListView):
|
||||
return ctx
|
||||
|
||||
|
||||
class MembershipUsageView(CustomerRequiredMixin, ListView):
|
||||
class MembershipView(CustomerAccountBaseMixin, ListView):
|
||||
template_name = 'pretixpresale/organizers/customer_memberships.html'
|
||||
context_object_name = 'memberships'
|
||||
paginate_by = 20
|
||||
|
||||
def get_queryset(self):
|
||||
return self.request.customer.memberships.with_usages().select_related(
|
||||
'membership_type', 'granted_in', 'granted_in__order', 'granted_in__order__event'
|
||||
)
|
||||
|
||||
|
||||
class MembershipUsageView(CustomerAccountBaseMixin, ListView):
|
||||
template_name = 'pretixpresale/organizers/customer_membership.html'
|
||||
context_object_name = 'usages'
|
||||
paginate_by = 20
|
||||
@@ -428,7 +461,16 @@ class MembershipUsageView(CustomerRequiredMixin, ListView):
|
||||
return ctx
|
||||
|
||||
|
||||
class AddressDeleteView(CustomerRequiredMixin, CompatDeleteView):
|
||||
class AddressView(CustomerAccountBaseMixin, ListView):
|
||||
template_name = 'pretixpresale/organizers/customer_addresses.html'
|
||||
context_object_name = 'invoice_addresses'
|
||||
paginate_by = 20
|
||||
|
||||
def get_queryset(self):
|
||||
return InvoiceAddress.profiles.filter(customer=self.request.customer)
|
||||
|
||||
|
||||
class AddressDeleteView(CustomerAccountBaseMixin, CompatDeleteView):
|
||||
template_name = 'pretixpresale/organizers/customer_address_delete.html'
|
||||
context_object_name = 'address'
|
||||
|
||||
@@ -436,10 +478,19 @@ class AddressDeleteView(CustomerRequiredMixin, CompatDeleteView):
|
||||
return get_object_or_404(InvoiceAddress.profiles, customer=self.request.customer, pk=self.kwargs.get('id'))
|
||||
|
||||
def get_success_url(self):
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.profile', kwargs={})
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.addresses', kwargs={})
|
||||
|
||||
|
||||
class ProfileDeleteView(CustomerRequiredMixin, CompatDeleteView):
|
||||
class ProfileView(CustomerAccountBaseMixin, ListView):
|
||||
template_name = 'pretixpresale/organizers/customer_profiles.html'
|
||||
context_object_name = 'attendee_profiles'
|
||||
paginate_by = 20
|
||||
|
||||
def get_queryset(self):
|
||||
return self.request.customer.attendee_profiles.all()
|
||||
|
||||
|
||||
class ProfileDeleteView(CustomerAccountBaseMixin, CompatDeleteView):
|
||||
template_name = 'pretixpresale/organizers/customer_profile_delete.html'
|
||||
context_object_name = 'profile'
|
||||
|
||||
@@ -447,10 +498,10 @@ class ProfileDeleteView(CustomerRequiredMixin, CompatDeleteView):
|
||||
return get_object_or_404(self.request.customer.attendee_profiles, pk=self.kwargs.get('id'))
|
||||
|
||||
def get_success_url(self):
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.profile', kwargs={})
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.profiles', kwargs={})
|
||||
|
||||
|
||||
class ChangePasswordView(CustomerRequiredMixin, FormView):
|
||||
class ChangePasswordView(CustomerAccountBaseMixin, FormView):
|
||||
template_name = 'pretixpresale/organizers/customer_password.html'
|
||||
form_class = ChangePasswordForm
|
||||
|
||||
@@ -465,7 +516,7 @@ class ChangePasswordView(CustomerRequiredMixin, FormView):
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
def get_success_url(self):
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.profile', kwargs={})
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.index', kwargs={})
|
||||
|
||||
@transaction.atomic()
|
||||
def form_valid(self, form):
|
||||
@@ -483,7 +534,7 @@ class ChangePasswordView(CustomerRequiredMixin, FormView):
|
||||
return kwargs
|
||||
|
||||
|
||||
class ChangeInformationView(CustomerRequiredMixin, FormView):
|
||||
class ChangeInformationView(CustomerAccountBaseMixin, FormView):
|
||||
template_name = 'pretixpresale/organizers/customer_info.html'
|
||||
form_class = ChangeInfoForm
|
||||
|
||||
@@ -498,7 +549,7 @@ class ChangeInformationView(CustomerRequiredMixin, FormView):
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
def get_success_url(self):
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.profile', kwargs={})
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.index', kwargs={})
|
||||
|
||||
def form_valid(self, form):
|
||||
if form.cleaned_data['email'] != self.initial_email and not self.request.customer.provider:
|
||||
@@ -581,7 +632,7 @@ class ConfirmChangeView(View):
|
||||
return HttpResponseRedirect(self.get_success_url())
|
||||
|
||||
def get_success_url(self):
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.profile', kwargs={})
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.index', kwargs={})
|
||||
|
||||
|
||||
class SSOLoginView(RedirectBackMixin, View):
|
||||
@@ -641,7 +692,7 @@ class SSOLoginView(RedirectBackMixin, View):
|
||||
url = self.get_redirect_url()
|
||||
|
||||
if not url:
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.profile', kwargs={})
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.index', kwargs={})
|
||||
return url
|
||||
|
||||
|
||||
@@ -864,7 +915,7 @@ class SSOLoginReturnView(RedirectBackMixin, View):
|
||||
url = self.get_redirect_url(redirect_to)
|
||||
|
||||
if not url:
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.profile', kwargs={})
|
||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.index', kwargs={})
|
||||
else:
|
||||
if self.request.session.get(f'pretix_customerauth_{self.provider.pk}_cross_domain_requested'):
|
||||
otpstore = SessionStore()
|
||||
|
||||
Reference in New Issue
Block a user