forked from CGM_Public/pretix_original
change to pages instead of tabs
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
{% if request.organizer.settings.customer_accounts %}
|
{% if request.organizer.settings.customer_accounts %}
|
||||||
<nav class="loginstatus" aria-label="{% trans "customer account" %}">
|
<nav class="loginstatus" aria-label="{% trans "customer account" %}">
|
||||||
{% if request.customer %}
|
{% if request.customer %}
|
||||||
<a href="{% abseventurl request.organizer "presale:organizer.customer.profile" %}"
|
<a href="{% abseventurl request.organizer "presale:organizer.customer.index" %}"
|
||||||
aria-label="{% trans "View customer account" %}" data-placement="bottom"
|
aria-label="{% trans "View customer account" %}" data-placement="bottom"
|
||||||
title="{% trans "View user profile" %}" data-toggle="tooltip">
|
title="{% trans "View user profile" %}" data-toggle="tooltip">
|
||||||
<span class="fa fa-user" aria-hidden="true"></span>
|
<span class="fa fa-user" aria-hidden="true"></span>
|
||||||
|
|||||||
@@ -9,48 +9,63 @@
|
|||||||
<h2>
|
<h2>
|
||||||
{% trans "Your account" %}
|
{% trans "Your account" %}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<dl>
|
<dl>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<dt>{{ customer.name }}</dt>
|
<dt>{{ customer.name }}</dt>
|
||||||
<dd>{{ customer.email }}</dd>
|
<dd>{{ customer.email }}</dd>
|
||||||
{% if customer.phone %}
|
{% if customer.phone %}
|
||||||
<dd><spani class="fa fa-phone" aria-hidden="true"></span> {{ customer.phone }}</dd>
|
<dd><spani class="fa fa-phone" aria-hidden="true"></span> {{ customer.phone }}</dd>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<dd>
|
<dd>
|
||||||
<ul class="list-inline">
|
<ul class="list-inline">
|
||||||
<li><a href="{% eventurl request.organizer "presale:organizer.customer.change" %}">
|
<li><a href="{% eventurl request.organizer "presale:organizer.customer.change" %}">
|
||||||
<span class="fa fa-edit" aria-hidden=true></span> {% trans "Change account information" %}</a></li>
|
<span class="fa fa-edit" aria-hidden=true></span> {% trans "Change account information" %}</a></li>
|
||||||
<li><a href="{% eventurl request.organizer "presale:organizer.customer.password" %}">
|
<li><a href="{% eventurl request.organizer "presale:organizer.customer.password" %}">
|
||||||
<span class="fa fa-key" aria-hidden=true></span> {% trans "Change password" %}</a></li>
|
<span class="fa fa-key" aria-hidden=true></span> {% trans "Change password" %}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-6 text-right">
|
<div class="col-sm-6 text-right">
|
||||||
<dt>{% trans "Customer ID" %}</dt>
|
<dt>{% trans "Customer ID" %}</dt>
|
||||||
<dd>#{{ customer.identifier }}</dd>
|
<dd>#{{ customer.identifier }}</dd>
|
||||||
</div>
|
</div> </dl>
|
||||||
</dl>
|
<nav class="row" aria-label="{% trans "customer account information" %}">
|
||||||
</div>
|
<ul class="list-inline blank-after col-xs-12">
|
||||||
|
<li>
|
||||||
|
<a href="{% eventurl request.organizer "presale:organizer.customer.index" %}">
|
||||||
|
<span class="fa fa-shopping-cart" aria-hidden="true"></span>{% trans "Orders" %}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{% eventurl request.organizer "presale:organizer.customer.memberships" %}">
|
||||||
|
<span class="fa fa-unlock-alt" aria-hidden="true"></span>{% trans "Memberships" %}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{% eventurl request.organizer "presale:organizer.customer.addresses" %}">
|
||||||
|
<span class="fa fa-address-card-o" aria-hidden="true"></span>{% trans "Addresses" %}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{% eventurl request.organizer "presale:organizer.customer.profiles" %}">
|
||||||
|
<span class="fa fa-users" aria-hidden="true"></span>{% trans "Attendee profiles" %}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<ul class="nav nav-tabs" role="tablist">
|
|
||||||
<li role="presentation" class="active">
|
<div class="panel panel-default">
|
||||||
<a href="#orders" aria-controls="orders" role="tab" data-toggle="tab">{% trans "Orders" %} ({{ page_obj.paginator.count }})</a>
|
<div class="panel-heading">
|
||||||
</li>
|
<h3 class="panel-title">
|
||||||
<li role="presentation">
|
<span class="fa fa-shopping-cart" aria-hidden="true"></span> <b>{% trans "Orders" %}</b> ({{ page_obj.paginator.count }})
|
||||||
<a href="#memberships" aria-controls="memberships" role="tab" data-toggle="tab">{% trans "Memberships" %} ({{ memberships|length }})</a>
|
</h3>
|
||||||
</li>
|
</div>
|
||||||
<li role="presentation">
|
<div class="panel-body">
|
||||||
<a href="#addresses" aria-controls="addresses" role="tab" data-toggle="tab">{% trans "Addresses" %} ({{ invoice_addresses|length }})</a>
|
|
||||||
</li>
|
|
||||||
<li role="presentation">
|
|
||||||
<a href="#profiles" aria-controls="profiles" role="tab" data-toggle="tab">{% trans "Attendee profiles" %} ({{ attendee_profiles|length }})</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<div class="tab-content">
|
|
||||||
<div role="tabpanel" class="tab-pane active" id="orders">
|
|
||||||
{% if orders %}
|
{% if orders %}
|
||||||
<ol class="event-list list-unstyled">
|
<ol class="event-list list-unstyled">
|
||||||
{% for o in orders %}
|
{% for o in orders %}
|
||||||
@@ -112,7 +127,10 @@
|
|||||||
{% else %}
|
{% else %}
|
||||||
<p class="text-center">{% trans "You don’t have any orders in your account yet." %}</p>
|
<p class="text-center">{% trans "You don’t have any orders in your account yet." %}</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
{% include "pretixcontrol/pagination.html" %}
|
||||||
|
|
||||||
<div role="tabpanel" class="tab-pane" id="memberships">
|
<div role="tabpanel" class="tab-pane" id="memberships">
|
||||||
<table class="panel-body table table-hover">
|
<table class="panel-body table table-hover">
|
||||||
<caption class="sr-only">{% trans "Memberships" %}</caption>
|
<caption class="sr-only">{% trans "Memberships" %}</caption>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4 col-sm-6">
|
<div class="col-md-4 col-sm-6">
|
||||||
<a class="btn btn-block btn-default btn-lg"
|
<a class="btn btn-block btn-default btn-lg"
|
||||||
href="{% abseventurl request.organizer "presale:organizer.customer.profile" %}">
|
href="{% abseventurl request.organizer "presale:organizer.customer.index" %}">
|
||||||
{% trans "Go back" %}
|
{% trans "Go back" %}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -210,10 +210,14 @@ organizer_patterns = [
|
|||||||
re_path(r'^account/password$', pretix.presale.views.customer.ChangePasswordView.as_view(), name='organizer.customer.password'),
|
re_path(r'^account/password$', pretix.presale.views.customer.ChangePasswordView.as_view(), name='organizer.customer.password'),
|
||||||
re_path(r'^account/change$', pretix.presale.views.customer.ChangeInformationView.as_view(), name='organizer.customer.change'),
|
re_path(r'^account/change$', pretix.presale.views.customer.ChangeInformationView.as_view(), name='organizer.customer.change'),
|
||||||
re_path(r'^account/confirmchange$', pretix.presale.views.customer.ConfirmChangeView.as_view(), name='organizer.customer.change.confirm'),
|
re_path(r'^account/confirmchange$', pretix.presale.views.customer.ConfirmChangeView.as_view(), name='organizer.customer.change.confirm'),
|
||||||
re_path(r'^account/membership/(?P<id>\d+)/$', pretix.presale.views.customer.MembershipUsageView.as_view(), name='organizer.customer.membership'),
|
re_path(r'^account/memberships$', pretix.presale.views.customer.MembershipView.as_view(), name='organizer.customer.memberships'),
|
||||||
|
re_path(r'^account/memberships/(?P<id>\d+)/$', pretix.presale.views.customer.MembershipUsageView.as_view(), name='organizer.customer.membership'),
|
||||||
|
re_path(r'^account/addresses$', pretix.presale.views.customer.AddressView.as_view(), name='organizer.customer.addresses'),
|
||||||
re_path(r'^account/addresses/(?P<id>\d+)/delete$', pretix.presale.views.customer.AddressDeleteView.as_view(), name='organizer.customer.address.delete'),
|
re_path(r'^account/addresses/(?P<id>\d+)/delete$', pretix.presale.views.customer.AddressDeleteView.as_view(), name='organizer.customer.address.delete'),
|
||||||
|
re_path(r'^account/profiles$', pretix.presale.views.customer.ProfileView.as_view(), name='organizer.customer.profiles'),
|
||||||
re_path(r'^account/profiles/(?P<id>\d+)/delete$', pretix.presale.views.customer.ProfileDeleteView.as_view(), name='organizer.customer.profile.delete'),
|
re_path(r'^account/profiles/(?P<id>\d+)/delete$', pretix.presale.views.customer.ProfileDeleteView.as_view(), name='organizer.customer.profile.delete'),
|
||||||
re_path(r'^account/$', pretix.presale.views.customer.ProfileView.as_view(), name='organizer.customer.profile'),
|
re_path(r'^account/$', pretix.presale.views.customer.IndexView.as_view(), name='organizer.customer.index'),
|
||||||
|
#re_path(r'^account/$', pretix.presale.views.customer.ProfileView.as_view(), name='organizer.customer.profile'),
|
||||||
|
|
||||||
re_path(r'^oauth2/v1/authorize$', pretix.presale.views.oidc_op.AuthorizeView.as_view(),
|
re_path(r'^oauth2/v1/authorize$', pretix.presale.views.oidc_op.AuthorizeView.as_view(),
|
||||||
name='organizer.oauth2.v1.authorize'),
|
name='organizer.oauth2.v1.authorize'),
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ class LoginView(RedirectBackMixin, FormView):
|
|||||||
url = self.get_redirect_url()
|
url = self.get_redirect_url()
|
||||||
|
|
||||||
if not 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":
|
if self.request.GET.get("request_cross_domain_customer_auth") == "true":
|
||||||
otpstore = SessionStore()
|
otpstore = SessionStore()
|
||||||
@@ -350,7 +350,7 @@ class CustomerRequiredMixin:
|
|||||||
return super().dispatch(request, *args, **kwargs)
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class ProfileView(CustomerRequiredMixin, ListView):
|
class IndexView(CustomerRequiredMixin, ListView):
|
||||||
template_name = 'pretixpresale/organizers/customer_profile.html'
|
template_name = 'pretixpresale/organizers/customer_profile.html'
|
||||||
context_object_name = 'orders'
|
context_object_name = 'orders'
|
||||||
paginate_by = 20
|
paginate_by = 20
|
||||||
@@ -405,6 +405,12 @@ class ProfileView(CustomerRequiredMixin, ListView):
|
|||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
|
|
||||||
|
class MembershipView(CustomerRequiredMixin, ListView):
|
||||||
|
template_name = 'pretixpresale/organizers/customer_memberships.html'
|
||||||
|
context_object_name = 'membership'
|
||||||
|
paginate_by = 20
|
||||||
|
|
||||||
|
|
||||||
class MembershipUsageView(CustomerRequiredMixin, ListView):
|
class MembershipUsageView(CustomerRequiredMixin, ListView):
|
||||||
template_name = 'pretixpresale/organizers/customer_membership.html'
|
template_name = 'pretixpresale/organizers/customer_membership.html'
|
||||||
context_object_name = 'usages'
|
context_object_name = 'usages'
|
||||||
@@ -429,6 +435,12 @@ class MembershipUsageView(CustomerRequiredMixin, ListView):
|
|||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
|
|
||||||
|
class AddressView(CustomerRequiredMixin, ListView):
|
||||||
|
template_name = 'pretixpresale/organizers/customer_addresses.html'
|
||||||
|
context_object_name = 'address'
|
||||||
|
paginate_by = 20
|
||||||
|
|
||||||
|
|
||||||
class AddressDeleteView(CustomerRequiredMixin, CompatDeleteView):
|
class AddressDeleteView(CustomerRequiredMixin, CompatDeleteView):
|
||||||
template_name = 'pretixpresale/organizers/customer_address_delete.html'
|
template_name = 'pretixpresale/organizers/customer_address_delete.html'
|
||||||
context_object_name = 'address'
|
context_object_name = 'address'
|
||||||
@@ -437,7 +449,13 @@ class AddressDeleteView(CustomerRequiredMixin, CompatDeleteView):
|
|||||||
return get_object_or_404(InvoiceAddress.profiles, customer=self.request.customer, pk=self.kwargs.get('id'))
|
return get_object_or_404(InvoiceAddress.profiles, customer=self.request.customer, pk=self.kwargs.get('id'))
|
||||||
|
|
||||||
def get_success_url(self):
|
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 ProfileView(CustomerRequiredMixin, ListView):
|
||||||
|
template_name = 'pretixpresale/organizers/customer_profiles.html'
|
||||||
|
context_object_name = 'profile'
|
||||||
|
paginate_by = 20
|
||||||
|
|
||||||
|
|
||||||
class ProfileDeleteView(CustomerRequiredMixin, CompatDeleteView):
|
class ProfileDeleteView(CustomerRequiredMixin, CompatDeleteView):
|
||||||
@@ -448,7 +466,7 @@ class ProfileDeleteView(CustomerRequiredMixin, CompatDeleteView):
|
|||||||
return get_object_or_404(self.request.customer.attendee_profiles, pk=self.kwargs.get('id'))
|
return get_object_or_404(self.request.customer.attendee_profiles, pk=self.kwargs.get('id'))
|
||||||
|
|
||||||
def get_success_url(self):
|
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(CustomerRequiredMixin, FormView):
|
||||||
@@ -466,7 +484,7 @@ class ChangePasswordView(CustomerRequiredMixin, FormView):
|
|||||||
return super().dispatch(request, *args, **kwargs)
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def get_success_url(self):
|
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()
|
@transaction.atomic()
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
@@ -499,7 +517,7 @@ class ChangeInformationView(CustomerRequiredMixin, FormView):
|
|||||||
return super().dispatch(request, *args, **kwargs)
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def get_success_url(self):
|
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):
|
def form_valid(self, form):
|
||||||
if form.cleaned_data['email'] != self.initial_email and not self.request.customer.provider:
|
if form.cleaned_data['email'] != self.initial_email and not self.request.customer.provider:
|
||||||
@@ -582,7 +600,7 @@ class ConfirmChangeView(View):
|
|||||||
return HttpResponseRedirect(self.get_success_url())
|
return HttpResponseRedirect(self.get_success_url())
|
||||||
|
|
||||||
def get_success_url(self):
|
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):
|
class SSOLoginView(RedirectBackMixin, View):
|
||||||
@@ -642,7 +660,7 @@ class SSOLoginView(RedirectBackMixin, View):
|
|||||||
url = self.get_redirect_url()
|
url = self.get_redirect_url()
|
||||||
|
|
||||||
if not 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
|
return url
|
||||||
|
|
||||||
|
|
||||||
@@ -865,7 +883,7 @@ class SSOLoginReturnView(RedirectBackMixin, View):
|
|||||||
url = self.get_redirect_url(redirect_to)
|
url = self.get_redirect_url(redirect_to)
|
||||||
|
|
||||||
if not url:
|
if not url:
|
||||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.profile', kwargs={})
|
return eventreverse(self.request.organizer, 'presale:organizer.customer.index', kwargs={})
|
||||||
else:
|
else:
|
||||||
if self.request.session.get(f'pretix_customerauth_{self.provider.pk}_cross_domain_requested'):
|
if self.request.session.get(f'pretix_customerauth_{self.provider.pk}_cross_domain_requested'):
|
||||||
otpstore = SessionStore()
|
otpstore = SessionStore()
|
||||||
|
|||||||
Reference in New Issue
Block a user