Skip to content

Commit

Permalink
Issue fossasia#449: Display and change order locale (fossasia#459)
Browse files Browse the repository at this point in the history
* Add more security headers (fossasia#458)

* Include some missing security headers

This change adds the following security headers:
* X-Content-Type-Options to prevent content type sniffing
* Referrer-Policy to prevent leaking referrer information when navigating away from the instance

* Migrate from Docker sample to manual configuration

Migrate the additional security headers from the Docker configuration sample to the manual configuration guide.

Add DS_Store to gitingore

* Show order locale in order details

* Add OrderLocaleChange view and OrderLocaleForm

Refactor OrderLocaleForm. Add test
  • Loading branch information
rahmonov authored and raphaelm committed Apr 11, 2017
1 parent 984d5c7 commit ccb981e
Show file tree
Hide file tree
Showing 7 changed files with 114 additions and 1 deletion.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,6 @@ pretixeu/
local/
.project
.pydevproject
.DS_Store


13 changes: 13 additions & 0 deletions src/pretix/control/forms/orders.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from django import forms
from django.conf import settings
from django.core.exceptions import ValidationError
from django.db import models
from django.utils.formats import localize
Expand Down Expand Up @@ -118,3 +119,15 @@ class OrderContactForm(forms.ModelForm):
class Meta:
model = Order
fields = ['email']


class OrderLocaleForm(forms.ModelForm):
locale = forms.ChoiceField()

class Meta:
model = Order
fields = ['locale']

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['locale'].choices = [(a, a) for a in self.instance.event.settings.locales]
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{% extends "pretixcontrol/event/base.html" %}
{% load i18n %}
{% load bootstrap3 %}
{% block title %}
{% trans "Change locale information" %}
{% endblock %}
{% block content %}
<h1>
{% trans "Change locale information" %}
</h1>
<p>
This language will be used whenever emails are sent to the users.
</p>

<form method="post" class="form-horizontal" href="">
{% csrf_token %}
<input type="hidden" name="status" value="c" />
{% bootstrap_form form layout='horizontal' %}
<div class="form-group submit-group">
<a class="btn btn-default btn-lg"
href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}">
{% trans "Cancel" %}
</a>
<button class="btn btn-primary btn-save btn-lg" type="submit">
{% trans "Save" %}
</button>
<div class="clearfix"></div>
</div>
</form>
{% endblock %}
7 changes: 7 additions & 0 deletions src/pretix/control/templates/pretixcontrol/order/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,13 @@ <h3 class="panel-title">
<dl class="dl-horizontal">
<dt>{% trans "Order code" %}</dt>
<dd>{{ order.code }}</dd>
<dt>{% trans "Order locale" %}</dt>
<dd>
{{ order.locale }}
<a href="{% url "control:event.order.locale" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}" class="btn btn-default btn-xs">
<span class="fa fa-edit"></span>
</a>
</dd>
<dt>{% trans "Order date" %}</dt>
<dd>{{ order.datetime }}</dd>
{% if order.status == "p" %}
Expand Down
2 changes: 2 additions & 0 deletions src/pretix/control/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,8 @@
name='event.order.extend'),
url(r'^orders/(?P<code>[0-9A-Z]+)/contact$', orders.OrderContactChange.as_view(),
name='event.order.contact'),
url(r'^orders/(?P<code>[0-9A-Z]+)/locale', orders.OrderLocaleChange.as_view(),
name='event.order.locale'),
url(r'^orders/(?P<code>[0-9A-Z]+)/comment$', orders.OrderComment.as_view(),
name='event.order.comment'),
url(r'^orders/(?P<code>[0-9A-Z]+)/change$', orders.OrderChange.as_view(),
Expand Down
36 changes: 35 additions & 1 deletion src/pretix/control/views/orders.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
register_data_exporters, register_payment_providers,
)
from pretix.control.forms.orders import (
CommentForm, ExporterForm, ExtendForm, OrderContactForm,
CommentForm, ExporterForm, ExtendForm, OrderContactForm, OrderLocaleForm,
OrderPositionChangeForm,
)
from pretix.control.permissions import EventPermissionRequiredMixin
Expand Down Expand Up @@ -552,6 +552,40 @@ def post(self, *args, **kwargs):
return self.get(*args, **kwargs)


class OrderLocaleChange(OrderView):
permission = 'can_change_orders'
template_name = 'pretixcontrol/order/change_locale.html'

def get_context_data(self, **kwargs):
ctx = super().get_context_data()
ctx['form'] = self.form
return ctx

@cached_property
def form(self):
return OrderLocaleForm(
instance=self.order,
data=self.request.POST if self.request.method == "POST" else None
)

def post(self, *args, **kwargs):
old_locale = self.order.locale
if self.form.is_valid():
self.order.log_action(
'pretix.event.order.locale.changed',
data={
'old_locale': old_locale,
'new_locale': self.form.cleaned_data['locale'],
},
user=self.request.user,
)

self.form.save()
messages.success(self.request, _('The order has been changed.'))
return redirect(self.get_order_url())
return self.get(*args, **kwargs)


class OverView(EventPermissionRequiredMixin, TemplateView):
template_name = 'pretixcontrol/orders/overview.html'
permission = 'can_view_orders'
Expand Down
25 changes: 25 additions & 0 deletions src/tests/control/test_orders.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ def env():
category=None, default_price=23,
admission=True)
event.settings.set('attendee_names_asked', True)
event.settings.set('locales', ['en', 'de'])
OrderPosition.objects.create(
order=o,
item=ticket,
Expand Down Expand Up @@ -104,6 +105,30 @@ def test_order_set_contact(client, env):
assert o.email == '[email protected]'


@pytest.mark.django_db
def test_order_set_locale(client, env):
q = Quota.objects.create(event=env[0], size=0)
q.items.add(env[3])
client.login(email='[email protected]', password='dummy')
client.post('/control/event/dummy/dummy/orders/FOO/locale', {
'locale': 'de'
})
o = Order.objects.get(id=env[2].id)
assert o.locale == 'de'


@pytest.mark.django_db
def test_order_set_locale_with_invalid_locale_value(client, env):
q = Quota.objects.create(event=env[0], size=0)
q.items.add(env[3])
client.login(email='[email protected]', password='dummy')
client.post('/control/event/dummy/dummy/orders/FOO/locale', {
'locale': 'fr'
})
o = Order.objects.get(id=env[2].id)
assert o.locale == 'en'


@pytest.mark.django_db
def test_order_set_comment(client, env):
q = Quota.objects.create(event=env[0], size=0)
Expand Down

0 comments on commit ccb981e

Please sign in to comment.