Basic event settings

This commit is contained in:
Raphael Michel
2014-09-15 20:14:33 +02:00
parent 9ef88b4589
commit 2bc33a8f52
6 changed files with 163 additions and 11 deletions

View File

@@ -0,0 +1,32 @@
from django.http import HttpResponseForbidden
from django.utils.translation import ugettext as _
from tixlbase.models import EventPermission
def event_permission_required(function, permission):
def wrapper(request, *args, **kw):
if not request.user.is_authenticated():
return HttpResponseForbidden()
perm = EventPermission.objects.get(
event=request.event,
user=request.user
)
allowed = False
try:
allowed = getattr(perm, permission)
except AttributeError:
pass
if allowed:
return function(request, *args, **kw)
return HttpResponseForbidden(_('You do not have permission to view this content.'))
return wrapper
class EventPermissionRequiredMixin:
permission = ''
@classmethod
def as_view(cls, **initkwargs):
view = super(EventPermissionRequiredMixin, cls).as_view(**initkwargs)
return event_permission_required(view, cls.permission)

View File

@@ -15,6 +15,6 @@
{% endfor %}
</ul>
</li>
<li {% if url_name == "event.index" %}class="active"{% endif %}><a href="{% url 'control:index' %}">{% trans "Dashboard" %}</a></li>
<li {% if "event.settings" in url_name %}class="active"{% endif %}><a href="">{% trans "Settings" %}</a></li>
<li {% if url_name == "event.index" %}class="active"{% endif %}><a href="{% url 'control:event.index' organizer=request.event.organizer.slug event=request.event.slug %}">{% trans "Dashboard" %}</a></li>
<li {% if url_name == "event.settings" %}class="active"{% endif %}><a href="{% url 'control:event.settings' organizer=request.event.organizer.slug event=request.event.slug %}">{% trans "Settings" %}</a></li>
{% endblock %}

View File

@@ -0,0 +1,42 @@
{% extends "tixlcontrol/event/base.html" %}
{% load i18n %}
{% load bootstrap3 %}
{% block title %}{{ request.event.name }}{% endblock %}
{% block content %}
<h1>{% trans "Settings" %}</h1>
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
<fieldset>
<legend>{% trans "General information" %}</legend>
{% bootstrap_field form.name layout="horizontal" %}
{% bootstrap_field form.slug layout="horizontal" %}
{% bootstrap_field form.date_from layout="horizontal" %}
{% bootstrap_field form.date_to layout="horizontal" %}
{% bootstrap_field form.currency layout="horizontal" %}
</fieldset>
<fieldset>
<legend>{% trans "Display settings" %}</legend>
{% bootstrap_field form.locale layout="horizontal" %}
{% bootstrap_field form.timezone layout="horizontal" %}
{% bootstrap_field form.show_date_to layout="horizontal" %}
{% bootstrap_field form.show_times layout="horizontal" %}
</fieldset>
<fieldset>
<legend>{% trans "Presale settings" %}</legend>
{% bootstrap_field form.presale_start layout="horizontal" %}
{% bootstrap_field form.presale_end layout="horizontal" %}
</fieldset>
<fieldset>
<legend>{% trans "Payment settings" %}</legend>
{% bootstrap_field form.payment_term_days layout="horizontal" %}
{% bootstrap_field form.payment_term_last layout="horizontal" %}
</fieldset>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">
{% trans "Save" %}
</button>
</div>
</div>
</form>
{% endblock %}

View File

@@ -1,9 +1,10 @@
from django.conf.urls import patterns, url
from tixlcontrol.views import main
from tixlcontrol.views import main, event
urlpatterns = patterns('',
url(r'^$', 'tixlcontrol.views.main.index', name='index'),
url(r'^event/(?P<organizer>[^/]+)/(?P<event>[^/]+)/$', 'tixlcontrol.views.event.index', name='event.index'),
url(r'^event/(?P<organizer>[^/]+)/(?P<event>[^/]+)/settings$', event.EventUpdate.as_view(), name='event.settings'),
url(r'^events/$', main.EventList.as_view(), name='events'),
url(r'^logout$', 'tixlcontrol.views.auth.logout', name='auth.logout'),
url(r'^login$', 'tixlcontrol.views.auth.login', name='auth.login'),

View File

@@ -1,4 +1,63 @@
from django.shortcuts import render
from django.views.generic.edit import UpdateView
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.core.urlresolvers import reverse
from pytz import common_timezones
from tixlbase.models import Event
from tixlcontrol.permissions import EventPermissionRequiredMixin
class EventUpdateForm(forms.ModelForm):
timezone = forms.ChoiceField(
choices=((a, a) for a in common_timezones),
label=_("Default timezone"),
)
def clean_slug(self):
return self.instance.slug
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['slug'].widget.attrs['readonly'] = True
class Meta:
model = Event
localized_fields = '__all__'
fields = [
'name',
'slug',
'locale',
'timezone',
'currency',
'date_from',
'date_to',
'show_date_to',
'show_times',
'presale_start',
'presale_end',
'payment_term_days',
'payment_term_last',
]
class EventUpdate(EventPermissionRequiredMixin, UpdateView):
model = Event
form_class = EventUpdateForm
template_name = 'tixlcontrol/event/settings.html'
permission = 'can_change_settings'
def get_object(self, queryset=None):
return self.request.event
def get_success_url(self):
return reverse('control:event.settings', kwargs={
'organizer': self.get_object().organizer.slug,
'event': self.get_object().slug,
})
def index(request, organizer, event):