Added a model for event state (including data migration, signal based
notifications, etc.)
This commit is contained in:
@@ -45,7 +45,7 @@ class EventListView(generic.ListView):
|
||||
filter |= Q(sport__in=user_sports_list)
|
||||
|
||||
if has_role(user, 'publish') or has_role(user, 'publish_incremental'):
|
||||
filter |= Q(accepted=True)
|
||||
filter |= Q(flags__status__code='accepted')
|
||||
|
||||
qs = self.model.objects.filter(filter)
|
||||
|
||||
@@ -89,7 +89,7 @@ class EventListExportView(generic.FormView):
|
||||
txt = u''
|
||||
event_qs = models.Event.objects.filter(**filter_kwargs).order_by('sport', 'first_day')
|
||||
for event in event_qs:
|
||||
if exclude_expired and event.get_status() == 'expired':
|
||||
if exclude_expired and event.is_flagged('expired'):
|
||||
continue
|
||||
txt += event.render_as_text(format='ka-alpin')
|
||||
if event.internal_note:
|
||||
@@ -120,30 +120,38 @@ class EventPermissionMixin(object):
|
||||
return True
|
||||
|
||||
if permission == 'view':
|
||||
if obj.owner == user:
|
||||
if user == obj.owner:
|
||||
return True
|
||||
if has_role(user, 'manage_all'):
|
||||
return True
|
||||
if has_role(user, 'manage_{}'.format(obj.sport.lower())):
|
||||
return True
|
||||
if obj.accepted and (has_role(user, 'publish') or has_role(user, 'publish_incremental')):
|
||||
if has_role(user, 'publish_incremental') and obj.is_flagged('accepted'):
|
||||
return True
|
||||
if has_role(user, 'publish') and obj.is_flagged('accepted'):
|
||||
return True
|
||||
elif permission == 'submit':
|
||||
if user == obj.owner:
|
||||
return True
|
||||
elif permission == 'accept':
|
||||
if has_role(user, 'manage_all'):
|
||||
return True
|
||||
if has_role(user, 'manage_{}'.format(obj.sport.lower())):
|
||||
return True
|
||||
elif permission == 'publish':
|
||||
if has_role(user, 'publish') or has_role(user, 'publish_incremental'):
|
||||
return True
|
||||
elif permission == 'update':
|
||||
if not obj.accepted and not obj.publication_confirmed:
|
||||
if not obj.is_flagged('submitted'):
|
||||
if user == obj.owner:
|
||||
return True
|
||||
elif not obj.is_flagged('accepted'):
|
||||
if has_role(user, 'manage_all'):
|
||||
return True
|
||||
if has_role(user, 'manage_{}'.format(obj.sport.lower())):
|
||||
return True
|
||||
elif has_role(user, 'publish') or has_role(user, 'publish_incremental'):
|
||||
return True
|
||||
elif permission == 'publish':
|
||||
if has_role(user, 'publish') or has_role(user, 'publish_incremental'):
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
@@ -164,9 +172,10 @@ class EventDetailView(EventPermissionMixin, generic.DetailView):
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(EventDetailView, self).get_context_data(**kwargs)
|
||||
obj = context.get('event')
|
||||
context['has_permission_submit'] = self.has_permission('submit', obj)
|
||||
context['has_permission_accept'] = self.has_permission('accept', obj)
|
||||
context['has_permission_update'] = self.has_permission('update', obj)
|
||||
context['has_permission_publish'] = self.has_permission('publish', obj)
|
||||
context['has_permission_update'] = self.has_permission('update', obj)
|
||||
return context
|
||||
|
||||
@method_decorator(login_required)
|
||||
@@ -174,26 +183,43 @@ class EventDetailView(EventPermissionMixin, generic.DetailView):
|
||||
return super(EventDetailView, self).dispatch(request, *args, **kwargs)
|
||||
|
||||
|
||||
class EventAcceptView(EventDetailView):
|
||||
permission = 'accept'
|
||||
class EventConfirmStatusView(EventPermissionMixin, generic.DetailView):
|
||||
model = models.Event
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
status = kwargs.get('status')
|
||||
event = self.get_object()
|
||||
event.accept(request.user)
|
||||
messages.success(request, _(u'Veranstaltung freigegeben.'))
|
||||
return HttpResponseRedirect(event.get_absolute_url())
|
||||
|
||||
if status == 'submitted':
|
||||
if not self.has_permission('submit', event):
|
||||
raise PermissionDenied(status)
|
||||
elif status == 'accepted':
|
||||
if not self.has_permission('accept', event):
|
||||
raise PermissionDenied(status)
|
||||
if not event.is_flagged('submitted'):
|
||||
messages.error(request, _(u'Veranstaltung ist noch nicht eingereicht.'))
|
||||
return HttpResponseRedirect(event.get_absolute_url())
|
||||
elif status == 'publishing' or status == 'published':
|
||||
if not self.has_permission('publish', event):
|
||||
raise PermissionDenied(status)
|
||||
if not event.is_flagged('accepted'):
|
||||
messages.error(request, _(u'Veranstaltung ist noch nicht freigegeben.'))
|
||||
return HttpResponseRedirect(event.get_absolute_url())
|
||||
else:
|
||||
if not self.has_permission('update', event):
|
||||
raise PermissionDenied(status)
|
||||
|
||||
class EventConfirmPublicationView(EventDetailView):
|
||||
permission = 'publish'
|
||||
event.confirm_status(status, request.user)
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
event = self.get_object()
|
||||
if event.accepted:
|
||||
event.confirm_publication(request.user)
|
||||
if status == 'submitted':
|
||||
messages.success(request, _(u'Veranstaltung eingereicht.'))
|
||||
elif status == 'accepted':
|
||||
messages.success(request, _(u'Veranstaltung freigegeben.'))
|
||||
elif status == 'publishing' or status == 'published':
|
||||
messages.success(request, _(u'Veröffentlichung registriert.'))
|
||||
else:
|
||||
messages.error(request, _(u'Veranstaltung ist noch nicht freigegeben.'))
|
||||
messages.success(request, _(u'Veranstaltungsstatus registriert.'))
|
||||
|
||||
return HttpResponseRedirect(event.get_absolute_url())
|
||||
|
||||
|
||||
@@ -273,8 +299,12 @@ class EventCreateView(EventPermissionMixin, generic.FormView):
|
||||
return self.render_to_response(self.get_context_data(form=next_form, event=event))
|
||||
else:
|
||||
event.save()
|
||||
if 'submit' in form.data:
|
||||
event.confirm_status('submitted', event.owner)
|
||||
messages.success(self.request, _(u'Veranstaltung eingereicht.'))
|
||||
else:
|
||||
messages.success(self.request, _(u'Veranstaltung angelegt.'))
|
||||
form.flush_session_data()
|
||||
messages.success(self.request, _(u'Veranstaltung angelegt.'))
|
||||
owner = event.owner
|
||||
self.clean_session_data()
|
||||
if self.request.user.is_authenticated:
|
||||
|
||||
Reference in New Issue
Block a user