mostly auth stuff.
This commit is contained in:
@@ -1,5 +1,14 @@
|
|||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
# Auth Config
|
||||||
|
MANAGE_ALL_GROUP = 'Tourenreferenten'
|
||||||
|
MANAGE_W_GROUP = 'Wanderreferenten'
|
||||||
|
MANAGE_S_GROUP = 'Skireferenten'
|
||||||
|
MANAGE_M_GROUP = 'MTBReferenten'
|
||||||
|
MANAGE_K_GROUP = 'Kletterreferenten'
|
||||||
|
MANAGE_B_GROUP = 'Bergsteigerreferenten'
|
||||||
|
|
||||||
|
# Form Config
|
||||||
COMMON_CHAR_FIELD_LENGTH = 250
|
COMMON_CHAR_FIELD_LENGTH = 250
|
||||||
|
|
||||||
TITLE_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH
|
TITLE_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ STATIC_ROOT = os.path.join(BASE_VAR_DIR, 'www', 'static')
|
|||||||
|
|
||||||
LANGUAGE_CODE = 'de'
|
LANGUAGE_CODE = 'de'
|
||||||
|
|
||||||
|
LOGIN_URL = 'dav_events:login'
|
||||||
|
|
||||||
BOOTSTRAP3 = {
|
BOOTSTRAP3 = {
|
||||||
'set_placeholder': False,
|
'set_placeholder': False,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -635,8 +635,8 @@ class RegistrationForm(EventCreateForm):
|
|||||||
label=_(u'Anmeldeschluss'),
|
label=_(u'Anmeldeschluss'),
|
||||||
widget=forms.RadioSelect())
|
widget=forms.RadioSelect())
|
||||||
|
|
||||||
deadline_month = forms.CharField(widget=forms.HiddenInput())
|
deadline_month = forms.DateField(widget=forms.HiddenInput())
|
||||||
deadline_quarter = forms.CharField(widget=forms.HiddenInput())
|
deadline_quarter = forms.DateField(widget=forms.HiddenInput())
|
||||||
|
|
||||||
deadline_other = forms.DateField(required=False,
|
deadline_other = forms.DateField(required=False,
|
||||||
label=_(u'Anderer Anmeldeschluss'),
|
label=_(u'Anderer Anmeldeschluss'),
|
||||||
@@ -793,6 +793,8 @@ class ChargesForm(EventCreateForm):
|
|||||||
first_day = session_data.get('first_day', None)
|
first_day = session_data.get('first_day', None)
|
||||||
arrival_previous_day = session_data.get('arrival_previous_day', False)
|
arrival_previous_day = session_data.get('arrival_previous_day', False)
|
||||||
last_day = session_data.get('last_day', None)
|
last_day = session_data.get('last_day', None)
|
||||||
|
transport = session_data.get('transport', None)
|
||||||
|
accommodation = session_data.get('accommodation', None)
|
||||||
pre_meeting_1 = session_data.get('pre_meeting_1', None)
|
pre_meeting_1 = session_data.get('pre_meeting_1', None)
|
||||||
pre_meeting_2 = session_data.get('pre_meeting_2', None)
|
pre_meeting_2 = session_data.get('pre_meeting_2', None)
|
||||||
|
|
||||||
@@ -821,14 +823,20 @@ class ChargesForm(EventCreateForm):
|
|||||||
else:
|
else:
|
||||||
charge_key = 'J'
|
charge_key = 'J'
|
||||||
|
|
||||||
additional_costs_text = ugettext(u'Fahrtkosten')
|
additional_costs_text = u''
|
||||||
|
if transport != 'NONE':
|
||||||
|
additional_costs_text += ugettext(u'Fahrtkosten')
|
||||||
|
|
||||||
if last_day:
|
if last_day:
|
||||||
timedelta = last_day - first_day
|
timedelta = last_day - first_day
|
||||||
ndays = timedelta.days + 1
|
ndays = timedelta.days + 1
|
||||||
additional_costs_text += ugettext(u', Unterkunft und Verpflegung')
|
if accommodation != 'NONE':
|
||||||
|
if additional_costs_text:
|
||||||
|
additional_costs_text += u', '
|
||||||
|
additional_costs_text += ugettext(u'Unterkunft und Verpflegung')
|
||||||
else:
|
else:
|
||||||
ndays = 1
|
ndays = 1
|
||||||
|
|
||||||
if pre_meeting_2:
|
if pre_meeting_2:
|
||||||
n_pre_meetings = 2
|
n_pre_meetings = 2
|
||||||
elif pre_meeting_1:
|
elif pre_meeting_1:
|
||||||
@@ -851,9 +859,6 @@ class ChargesForm(EventCreateForm):
|
|||||||
trainer_reward += fees['trainer_day_fee'] / 2.0
|
trainer_reward += fees['trainer_day_fee'] / 2.0
|
||||||
charge += fees['participant_day_fee'] / 2.0
|
charge += fees['participant_day_fee'] / 2.0
|
||||||
|
|
||||||
if charge > 0:
|
|
||||||
additional_costs_text = u'%s %s' % (ugettext(u'zzgl.'), additional_costs_text)
|
|
||||||
|
|
||||||
self.fields['charge_key'].initial = fees['description'] or charge_key
|
self.fields['charge_key'].initial = fees['description'] or charge_key
|
||||||
self.fields['trainer_fee'].initial = fees['trainer_fee']
|
self.fields['trainer_fee'].initial = fees['trainer_fee']
|
||||||
self.fields['pre_meeting_fee'].initial = fees['pre_meeting_fee']
|
self.fields['pre_meeting_fee'].initial = fees['pre_meeting_fee']
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ CHOICE_FIELD_MAX_LENGTH = 25
|
|||||||
|
|
||||||
|
|
||||||
def get_ghost_user():
|
def get_ghost_user():
|
||||||
return get_user_model().objects.get_or_create(username='deleted')[0]
|
return get_user_model().objects.get_or_create(username='-deleted-')[0]
|
||||||
|
|
||||||
|
|
||||||
class Event(models.Model):
|
class Event(models.Model):
|
||||||
# Meta
|
# Metadata
|
||||||
owner = models.ForeignKey(settings.AUTH_USER_MODEL,
|
owner = models.ForeignKey(settings.AUTH_USER_MODEL,
|
||||||
null=True,
|
null=True,
|
||||||
on_delete=models.SET(get_ghost_user),
|
on_delete=models.SET(get_ghost_user),
|
||||||
@@ -142,7 +142,7 @@ class Event(models.Model):
|
|||||||
notify = True
|
notify = True
|
||||||
user_model = get_user_model()
|
user_model = get_user_model()
|
||||||
try:
|
try:
|
||||||
owner = user_model.objects.get(username=self.trainer_email)
|
owner = user_model.objects.get(username=self.trainer_email.lower())
|
||||||
except user_model.DoesNotExist:
|
except user_model.DoesNotExist:
|
||||||
owner = user_model(username=self.trainer_email.lower(),
|
owner = user_model(username=self.trainer_email.lower(),
|
||||||
first_name=self.trainer_firstname,
|
first_name=self.trainer_firstname,
|
||||||
|
|||||||
@@ -36,13 +36,13 @@
|
|||||||
|
|
||||||
<div id="page-body">
|
<div id="page-body">
|
||||||
{% block page-body %}
|
{% block page-body %}
|
||||||
<div class="container">
|
|
||||||
{% block page-container %}
|
|
||||||
{% endblock page-container %}
|
|
||||||
</div>
|
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
{% block page-container-fluid %}
|
{% block page-container-fluid %}
|
||||||
{% endblock page-container-fluid %}
|
{% endblock page-container-fluid %}
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
{% block page-container %}
|
||||||
|
{% endblock page-container %}
|
||||||
</div>
|
</div>
|
||||||
{% endblock page-body %}
|
{% endblock page-body %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<span class="panel-title">{{ sport|upper }}XX/{{ first_day|date:'y' }} - {{ title }}</span>
|
<span class="panel-title">{{ sport|upper }}**/{{ first_day|date:'y' }} - {{ title }}</span>
|
||||||
</div>
|
</div>
|
||||||
<ul class="list-group">
|
<ul class="list-group">
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
@@ -101,7 +101,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% if meeting_point and meeting_point != 'NONE' %}
|
{% if meeting_point and meeting_point != 'NONE' %}
|
||||||
<strong>{% trans 'Treffpunkt' %}:</strong>
|
<strong>{% trans 'Treffpunkt' %}:</strong>
|
||||||
{% if meeting_time %}{{ meeting_time }} Uhr, {% endif %}
|
{% if meeting_time %}{{ meeting_time|time:'G:i'|cut:':00' }} Uhr, {% endif %}
|
||||||
{% if meeting_point == 'OTHER' %}
|
{% if meeting_point == 'OTHER' %}
|
||||||
{{ meeting_point_other }}
|
{{ meeting_point_other }}
|
||||||
{% else %}
|
{% else %}
|
||||||
@@ -111,10 +111,10 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% if pre_meeting_1 %}
|
{% if pre_meeting_1 %}
|
||||||
{% if pre_meeting_2 %}
|
{% if pre_meeting_2 %}
|
||||||
<strong>{% trans 'Vortreffen' %} 1:</strong> {{ pre_meeting_1|date:'l, d. F Y, H:i' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}<br />
|
<strong>{% trans 'Vortreffen' %} 1:</strong> {{ pre_meeting_1|date:'l, d. F Y, G:i'|cut:':00' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}<br />
|
||||||
<strong>{% trans 'Vortreffen' %} 2:</strong> {{ pre_meeting_2|date:'l, d. F Y, H:i' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}<br />
|
<strong>{% trans 'Vortreffen' %} 2:</strong> {{ pre_meeting_2|date:'l, d. F Y, G:i'|cut:':00' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}<br />
|
||||||
{% else %}
|
{% else %}
|
||||||
<strong>{% trans 'Vortreffen' %}:</strong> {{ pre_meeting_1|date:'l, d. F Y, H:i' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}<br />
|
<strong>{% trans 'Vortreffen' %}:</strong> {{ pre_meeting_1|date:'l, d. F Y, G:i'|cut:':00' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}<br />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if min_participants > 0 or max_participants > 0 %}
|
{% if min_participants > 0 or max_participants > 0 %}
|
||||||
@@ -134,6 +134,7 @@
|
|||||||
{{ charge|floatformat:'-2' }} € {% trans 'Teilnahmegebühr' %}
|
{{ charge|floatformat:'-2' }} € {% trans 'Teilnahmegebühr' %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if additional_costs %}
|
{% if additional_costs %}
|
||||||
|
{% if charge > 0 %}{% trans 'zzgl.' %}{% endif %}
|
||||||
{{ additional_costs }}
|
{{ additional_costs }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<br />
|
<br />
|
||||||
|
|||||||
@@ -3,32 +3,53 @@
|
|||||||
|
|
||||||
{% block head-title %}{{ event.title }} - {{ block.super }}{% endblock head-title %}
|
{% block head-title %}{{ event.title }} - {{ block.super }}{% endblock head-title %}
|
||||||
|
|
||||||
|
{% block page-container-fluid %}
|
||||||
|
<div class="action-tabs">
|
||||||
|
<ul class="nav nav-tabs" role="tablist">
|
||||||
|
<li>
|
||||||
|
<a href="{% url 'dav_events:event_list' %}">{% trans 'Veranstaltungsliste' %}</a>
|
||||||
|
</li>
|
||||||
|
<li class="active">
|
||||||
|
<a href="{% url 'dav_events:event_detail' event.pk %}">{% trans 'Details' %}</a>
|
||||||
|
</li>
|
||||||
|
<li class="{% if not has_permission_accept or event.accepted %}disabled{% endif %}">
|
||||||
|
<a class="{% if has_permission_accept and not event.accepted %}btn-success{% endif %}"
|
||||||
|
href="{% url 'dav_events:event_accept' event.pk %}">{% trans 'Freigeben' %}</a>
|
||||||
|
</li>
|
||||||
|
<li class="disabled">
|
||||||
|
<a href="{% url 'dav_events:event_detail' event.pk %}">{% trans 'Ändern' %}</a>
|
||||||
|
</li>
|
||||||
|
<li class="disabled">
|
||||||
|
<a href="{% url 'dav_events:event_detail' event.pk %}"
|
||||||
|
title="{% trans 'Diese Veranstaltung als Vorlage für eine neue Veranstaltung benutzen' %}">{% trans 'Kopieren' %}</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{% endblock page-container-fluid %}
|
||||||
|
|
||||||
{% block page-container %}
|
{% block page-container %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-12">
|
||||||
{{ event.render_as_html }}
|
{{ event.render_as_html }}
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<strong>{% trans 'Eingereicht' %}:</strong> {{ event.created_at|date:'l, d. F Y, H:i' }} Uhr
|
<div class="row">
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<strong>{% trans 'Eingereicht' %}:</strong>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
{{ event.created_at|date:'l, d. F Y, H:i' }} Uhr
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-2">
|
||||||
|
{% if event.accepted %}
|
||||||
|
<span class="label label-success">{% trans 'Freigegeben' %}</span>
|
||||||
|
{% else %}
|
||||||
|
<span class="label label-danger">{% trans 'Nicht Freigegeben' %}</span>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-2">
|
|
||||||
<ul class="list-group">
|
|
||||||
<li class="list-group-item"><strong>Status</strong></li>
|
|
||||||
{% if event.accepted %}
|
|
||||||
<li class="list-group-item list-group-item-success">{% trans 'Freigegeben' %}</li>
|
|
||||||
{% else %}
|
|
||||||
<li class="list-group-item list-group-item-danger">{% trans 'Nicht Freigegeben' %}</li>
|
|
||||||
{% endif %}
|
|
||||||
</ul>
|
|
||||||
<div class="btn-group-vertical" role="group">
|
|
||||||
<a class="btn btn-primary" href="{% url 'dav_events:event_list' %}">{% trans 'Zurück' %}</a>
|
|
||||||
{% if not event.accepted %}
|
|
||||||
<a disabled="disabled" class="btn btn-warning" href="">{% trans 'Ändern' %}</a>
|
|
||||||
<a class="btn btn-success" href="{% url 'dav_events:event_accept' event.pk %}">{% trans 'Freigeben' %}</a>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
{% endblock page-container %}
|
{% endblock page-container %}
|
||||||
@@ -2,6 +2,17 @@
|
|||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
{% block page-container-fluid %}
|
{% block page-container-fluid %}
|
||||||
|
<div class="action-tabs">
|
||||||
|
<ul class="nav nav-tabs" role="tablist">
|
||||||
|
<li class="active">
|
||||||
|
<a href="{% url 'dav_events:event_list' %}">{% trans 'Veranstaltungsliste' %}</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="btn-primary" href="{% url 'dav_events:event_create' %}">{% trans 'Neue Veranstaltung' %}</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<table id="objects_table" class="table table-striped">
|
<table id="objects_table" class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
@@ -30,9 +41,13 @@
|
|||||||
<a href="{% url 'dav_events:event_detail' event.pk %}">{{ event.title }}</a>
|
<a href="{% url 'dav_events:event_detail' event.pk %}">{{ event.title }}</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ event.trainer_firstname }} {{ event.trainer_familyname }}
|
{% if event.owner.get_full_name %}
|
||||||
|
{{ event.owner.get_full_name }}<br />{{ event.owner.email }}
|
||||||
|
{% else %}
|
||||||
|
{{ event.owner }}
|
||||||
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td data-order="{{ first_day|date:'U' }}">
|
<td data-order="{{ event.first_day|date:'U' }}">
|
||||||
{{ event.get_short_date }}
|
{{ event.get_short_date }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@@ -48,7 +63,7 @@
|
|||||||
</table>
|
</table>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(document).ready( function () {
|
$(document).ready( function () {
|
||||||
var table = $('#objects_table').DataTable( {
|
var table = $("#objects_table").DataTable( {
|
||||||
orderCellsTop: true,
|
orderCellsTop: true,
|
||||||
paging: false,
|
paging: false,
|
||||||
language: {
|
language: {
|
||||||
@@ -59,12 +74,13 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
$('#objects_table thead input').on( 'keyup change', function() {
|
$("#objects_table thead input").on( "keyup change", function() {
|
||||||
table
|
table
|
||||||
.column( $(this).parent().index() )
|
.column( $(this).parent().index() )
|
||||||
.search( this.value )
|
.search( this.value )
|
||||||
.draw();
|
.draw();
|
||||||
} );
|
} );
|
||||||
|
$("#objects_table_filter").hide();
|
||||||
} );
|
} );
|
||||||
</script>
|
</script>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,12 +3,14 @@ import os
|
|||||||
|
|
||||||
from django.contrib.auth import login, views as auth_views
|
from django.contrib.auth import login, views as auth_views
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.core.exceptions import SuspiciousOperation
|
from django.core.exceptions import PermissionDenied, SuspiciousOperation
|
||||||
|
from django.db.models import Q
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.urls import reverse, reverse_lazy
|
from django.urls import reverse, reverse_lazy
|
||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
from django.views import generic
|
from django.views import generic
|
||||||
|
|
||||||
|
from . import config
|
||||||
from . import forms
|
from . import forms
|
||||||
from . import models
|
from . import models
|
||||||
|
|
||||||
@@ -45,15 +47,85 @@ class SetPasswordView(auth_views.PasswordChangeView):
|
|||||||
|
|
||||||
class EventListView(generic.ListView):
|
class EventListView(generic.ListView):
|
||||||
model = models.Event
|
model = models.Event
|
||||||
queryset = models.Event.objects.all()
|
|
||||||
|
def get_queryset(self):
|
||||||
|
user = self.request.user
|
||||||
|
if user.is_superuser:
|
||||||
|
qs = self.model.objects.all()
|
||||||
|
elif user.groups.filter(name=config.MANAGE_ALL_GROUP).count():
|
||||||
|
qs = self.model.objects.all()
|
||||||
|
else:
|
||||||
|
user_sports_list = list()
|
||||||
|
for k in ['W', 'S', 'M', 'K', 'B']:
|
||||||
|
group_name_var = 'MANAGE_{}_GROUP'.format(k)
|
||||||
|
group_name = getattr(config, group_name_var, None)
|
||||||
|
if group_name and user.groups.filter(name=group_name).count():
|
||||||
|
user_sports_list.append(k)
|
||||||
|
qs = self.model.objects.filter(Q(owner=user) | Q(sport__in=user_sports_list))
|
||||||
|
|
||||||
|
return qs
|
||||||
|
|
||||||
|
@method_decorator(login_required)
|
||||||
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
return super(EventListView, self).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class EventDetailView(generic.DetailView):
|
class EventPermissionMixin(object):
|
||||||
|
permission = 'view'
|
||||||
|
|
||||||
|
def has_permission(self, permission, obj):
|
||||||
|
user = self.request.user
|
||||||
|
|
||||||
|
if user.is_superuser:
|
||||||
|
return True
|
||||||
|
|
||||||
|
if permission == 'view':
|
||||||
|
if obj.owner == user:
|
||||||
|
return True
|
||||||
|
if user.groups.filter(name=config.MANAGE_ALL_GROUP).count():
|
||||||
|
return True
|
||||||
|
group_name_var = 'MANAGE_{}_GROUP'.format(obj.sport)
|
||||||
|
group_name = getattr(config, group_name_var, None)
|
||||||
|
if group_name and user.groups.filter(name=group_name).count():
|
||||||
|
return True
|
||||||
|
elif permission in ('edit', 'accept'):
|
||||||
|
if user.groups.filter(name=config.MANAGE_ALL_GROUP).count():
|
||||||
|
return True
|
||||||
|
group_name_var = 'MANAGE_{}_GROUP'.format(obj.sport)
|
||||||
|
group_name = getattr(config, group_name_var, None)
|
||||||
|
if group_name and user.groups.filter(name=group_name).count():
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
def enforce_permission(self, obj):
|
||||||
|
permission = self.permission
|
||||||
|
if not self.has_permission(permission, obj):
|
||||||
|
raise PermissionDenied()
|
||||||
|
|
||||||
|
|
||||||
|
class EventDetailView(EventPermissionMixin, generic.DetailView):
|
||||||
model = models.Event
|
model = models.Event
|
||||||
|
|
||||||
|
def get_object(self, queryset=None):
|
||||||
|
obj = super(EventDetailView, self).get_object(queryset=queryset)
|
||||||
|
self.enforce_permission(obj)
|
||||||
|
return obj
|
||||||
|
|
||||||
class EventAcceptView(generic.DetailView):
|
def get_context_data(self, **kwargs):
|
||||||
model = models.Event
|
context = super(EventDetailView, self).get_context_data(**kwargs)
|
||||||
|
obj = context.get('event')
|
||||||
|
context['has_permission_accept'] = self.has_permission('accept', obj)
|
||||||
|
context['has_permission_edit'] = self.has_permission('edit', obj)
|
||||||
|
return context
|
||||||
|
|
||||||
|
@method_decorator(login_required)
|
||||||
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
return super(EventDetailView, self).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class EventAcceptView(EventDetailView):
|
||||||
|
permission = 'accept'
|
||||||
|
|
||||||
def accept(self):
|
def accept(self):
|
||||||
event = self.get_object()
|
event = self.get_object()
|
||||||
@@ -118,7 +190,7 @@ class EventCreateView(generic.FormView):
|
|||||||
next_url = reverse('dav_events:event_list')
|
next_url = reverse('dav_events:event_list')
|
||||||
else:
|
else:
|
||||||
login(self.request, owner)
|
login(self.request, owner)
|
||||||
next_url = reverse('dav_events:set_password', kwargs={'pk': owner.pk})
|
next_url = reverse('dav_events:set_password')
|
||||||
return HttpResponseRedirect(next_url)
|
return HttpResponseRedirect(next_url)
|
||||||
|
|
||||||
def clean_session_data(self, session=None):
|
def clean_session_data(self, session=None):
|
||||||
|
|||||||
Reference in New Issue
Block a user