mirror of
https://github.com/pretix/pretix.git
synced 2026-05-09 15:54:03 +00:00
Customers: Allow admin to trigger password reset
This commit is contained in:
@@ -22,31 +22,41 @@
|
|||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<dl class="dl-horizontal">
|
<form action="" method="post">
|
||||||
<dt>{% trans "Customer ID" %}</dt>
|
{% csrf_token %}
|
||||||
<dd>#{{ customer.identifier }}</dd>
|
<dl class="dl-horizontal">
|
||||||
<dt>{% trans "Status" %}</dt>
|
<dt>{% trans "Customer ID" %}</dt>
|
||||||
<dd>
|
<dd>#{{ customer.identifier }}</dd>
|
||||||
{% if not customer.is_active %}
|
<dt>{% trans "Status" %}</dt>
|
||||||
{% trans "disabled" %}
|
<dd>
|
||||||
|
{% if not customer.is_active %}
|
||||||
|
{% trans "disabled" %}
|
||||||
{% elif not customer.is_verified %}
|
{% elif not customer.is_verified %}
|
||||||
{% trans "not yet activated" %}
|
{% trans "not yet activated" %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% trans "active" %}
|
{% trans "active" %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</dd>
|
</dd>
|
||||||
<dt>{% trans "E-mail" %}</dt>
|
<dt>{% trans "E-mail" %}</dt>
|
||||||
<dd>{{ customer.email|default_if_none:"" }}</dd>
|
<dd>
|
||||||
<dt>{% trans "Name" %}</dt>
|
{{ customer.email|default_if_none:"" }}
|
||||||
<dd>{{ customer.name }}</dd>
|
{% if customer.email %}
|
||||||
<dt>{% trans "Locale" %}</dt>
|
<button type="submit" name="action" value="pwreset" class="btn btn-xs btn-default">
|
||||||
<dd>{{ display_locale }}</dd>
|
{% trans "Send password reset link" %}
|
||||||
<dt>{% trans "Registration date" %}</dt>
|
</button>
|
||||||
<dd>{{ customer.date_joined|date:"SHORT_DATETIME_FORMAT" }}</dd>
|
{% endif %}
|
||||||
<dt>{% trans "Last login" %}</dt>
|
</dd>
|
||||||
<dd>{% if customer.last_login %}{{ customer.last_login|date:"SHORT_DATETIME_FORMAT" }}{% else %}
|
<dt>{% trans "Name" %}</dt>
|
||||||
–{% endif %}</dd>
|
<dd>{{ customer.name }}</dd>
|
||||||
</dl>
|
<dt>{% trans "Locale" %}</dt>
|
||||||
|
<dd>{{ display_locale }}</dd>
|
||||||
|
<dt>{% trans "Registration date" %}</dt>
|
||||||
|
<dd>{{ customer.date_joined|date:"SHORT_DATETIME_FORMAT" }}</dd>
|
||||||
|
<dt>{% trans "Last login" %}</dt>
|
||||||
|
<dd>{% if customer.last_login %}{{ customer.last_login|date:"SHORT_DATETIME_FORMAT" }}{% else %}
|
||||||
|
–{% endif %}</dd>
|
||||||
|
</dl>
|
||||||
|
</form>
|
||||||
<div class="text-right">
|
<div class="text-right">
|
||||||
<a href="{% url "control:organizer.customer.edit" organizer=request.organizer.slug customer=customer.identifier %}"
|
<a href="{% url "control:organizer.customer.edit" organizer=request.organizer.slug customer=customer.identifier %}"
|
||||||
class="btn btn-default">
|
class="btn btn-default">
|
||||||
|
|||||||
@@ -18,9 +18,15 @@
|
|||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<form class="row filter-form" action="" method="get">
|
<form class="row filter-form" action="" method="get">
|
||||||
<div class="col-md-10 col-sm-6 col-xs-12">
|
<div class="col-md-4 col-sm-6 col-xs-12">
|
||||||
{% bootstrap_field filter_form.query layout='inline' %}
|
{% bootstrap_field filter_form.query layout='inline' %}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-md-3 col-sm-6 col-xs-12">
|
||||||
|
{% bootstrap_field filter_form.status layout='inline' %}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 col-sm-6 col-xs-12">
|
||||||
|
{% bootstrap_field filter_form.membership layout='inline' %}
|
||||||
|
</div>
|
||||||
<div class="col-md-2 col-sm-6 col-xs-12">
|
<div class="col-md-2 col-sm-6 col-xs-12">
|
||||||
<button class="btn btn-primary btn-block" type="submit">
|
<button class="btn btn-primary btn-block" type="submit">
|
||||||
<span class="fa fa-filter"></span>
|
<span class="fa fa-filter"></span>
|
||||||
|
|||||||
@@ -102,7 +102,8 @@ from pretix.control.permissions import (
|
|||||||
from pretix.control.signals import nav_organizer
|
from pretix.control.signals import nav_organizer
|
||||||
from pretix.control.views import PaginationMixin
|
from pretix.control.views import PaginationMixin
|
||||||
from pretix.helpers.dicts import merge_dicts
|
from pretix.helpers.dicts import merge_dicts
|
||||||
from pretix.helpers.urls import build_absolute_uri
|
from pretix.multidomain.urlreverse import build_absolute_uri
|
||||||
|
from pretix.presale.forms.customer import TokenGenerator
|
||||||
from pretix.presale.style import regenerate_organizer_css
|
from pretix.presale.style import regenerate_organizer_css
|
||||||
|
|
||||||
|
|
||||||
@@ -1763,6 +1764,34 @@ class CustomerDetailView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMi
|
|||||||
identifier=self.kwargs.get('customer')
|
identifier=self.kwargs.get('customer')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def post(self, request, *args, **kwargs):
|
||||||
|
if request.POST.get('action') == 'pwreset':
|
||||||
|
self.customer.log_action('pretix.customer.password.resetrequested', {}, user=self.request.user)
|
||||||
|
ctx = self.customer.get_email_context()
|
||||||
|
token = TokenGenerator().make_token(self.customer)
|
||||||
|
ctx['url'] = build_absolute_uri(
|
||||||
|
self.request.organizer,
|
||||||
|
'presale:organizer.customer.recoverpw'
|
||||||
|
) + '?id=' + self.customer.identifier + '&token=' + token
|
||||||
|
mail(
|
||||||
|
self.customer.email,
|
||||||
|
_('Set a new password for your account at {organizer}').format(organizer=self.request.organizer.name),
|
||||||
|
self.request.organizer.settings.mail_text_customer_reset,
|
||||||
|
ctx,
|
||||||
|
locale=self.customer.locale,
|
||||||
|
customer=self.customer,
|
||||||
|
organizer=self.request.organizer,
|
||||||
|
)
|
||||||
|
messages.success(
|
||||||
|
self.request,
|
||||||
|
_('We\'ve sent the customer an email with further instructions on resetting your password.')
|
||||||
|
)
|
||||||
|
|
||||||
|
return redirect(reverse('control:organizer.customer', kwargs={
|
||||||
|
'organizer': self.request.organizer.slug,
|
||||||
|
'customer': self.customer.identifier,
|
||||||
|
}))
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
ctx = super().get_context_data(**kwargs)
|
ctx = super().get_context_data(**kwargs)
|
||||||
ctx['customer'] = self.customer
|
ctx['customer'] = self.customer
|
||||||
|
|||||||
Reference in New Issue
Block a user