409 lines
15 KiB
Python
409 lines
15 KiB
Python
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from django.contrib import messages
|
|
from django.contrib.auth import logout as logout_user
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.shortcuts import render, redirect, reverse, get_object_or_404
|
|
from django.http import HttpResponse, JsonResponse
|
|
from django.utils import timezone
|
|
|
|
from events.models.events import Event, CommonEvent, EventSeries, EventPhoto, Place, Attendee
|
|
from events.models.profiles import Team, Organization, UserProfile, Member
|
|
from events.forms import (
|
|
TeamEventForm,
|
|
NewTeamEventForm,
|
|
DeleteEventForm,
|
|
EventSeriesForm,
|
|
DeleteEventSeriesForm,
|
|
EventCommentForm,
|
|
NewPlaceForm,
|
|
UploadEventPhotoForm,
|
|
NewCommonEventForm
|
|
)
|
|
from events import location
|
|
|
|
import datetime
|
|
import simplejson
|
|
|
|
# Create your views here.
|
|
def events_list(request, *args, **kwargs):
|
|
if not request.user.is_authenticated:
|
|
return redirect('all-events')
|
|
events = Event.objects.filter(attendees=request.user.profile, end_time__gt=timezone.now()).order_by('start_time')
|
|
geo_ip = location.get_geoip(request)
|
|
context = {
|
|
'active': 'my',
|
|
'events_list': sorted(events, key=lambda event: location.event_distance_from(geo_ip.latlng, event)),
|
|
}
|
|
return render(request, 'get_together/events/list_events.html', context)
|
|
|
|
def events_list_all(request, *args, **kwargs):
|
|
events = Event.objects.filter(end_time__gt=timezone.now()).order_by('start_time')
|
|
geo_ip = location.get_geoip(request)
|
|
context = {
|
|
'active': 'all',
|
|
'events_list': sorted(events, key=lambda event: location.event_distance_from(geo_ip.latlng, event)),
|
|
}
|
|
return render(request, 'get_together/events/list_events.html', context)
|
|
|
|
def show_event(request, event_id, event_slug):
|
|
event = get_object_or_404(Event, id=event_id)
|
|
comment_form = EventCommentForm()
|
|
context = {
|
|
'team': event.team,
|
|
'event': event,
|
|
'comment_form': comment_form,
|
|
'is_attending': request.user.profile in event.attendees.all(),
|
|
'attendee_list': Attendee.objects.filter(event=event),
|
|
'can_edit_event': request.user.profile.can_edit_event(event),
|
|
}
|
|
return render(request, 'get_together/events/show_event.html', context)
|
|
|
|
def show_series(request, series_id, series_slug):
|
|
series = get_object_or_404(EventSeries, id=series_id)
|
|
context = {
|
|
'team': series.team,
|
|
'series': series,
|
|
'instances': series.instances.all().order_by('-start_time'),
|
|
'can_edit_event': request.user.profile.can_create_event(series.team),
|
|
}
|
|
return render(request, 'get_together/events/show_series.html', context)
|
|
|
|
@login_required
|
|
def create_event_team_select(request):
|
|
teams = request.user.profile.moderating
|
|
if len(teams) == 1:
|
|
return redirect('create-event', team_id=teams[0].id)
|
|
|
|
return render(request, 'get_together/events/create_event_team_select.html', {'teams': teams})
|
|
|
|
@login_required
|
|
def create_event(request, team_id):
|
|
team = get_object_or_404(Team, id=team_id)
|
|
if not request.user.profile.can_create_event(team):
|
|
messages.add_message(request, messages.WARNING, message=_('You can not create events for this team.'))
|
|
return redirect('show-team', team_id=team.pk)
|
|
|
|
new_event = Event(team=team, created_by=request.user.profile)
|
|
|
|
|
|
if request.method == 'GET':
|
|
if 'common' in request.GET and request.GET['common'] != '':
|
|
new_event.parent = CommonEvent.objects.get(id=request.GET['common'])
|
|
form = NewTeamEventForm(instance=new_event)
|
|
|
|
context = {
|
|
'event': new_event,
|
|
'team': team,
|
|
'event_form': form,
|
|
}
|
|
return render(request, 'get_together/events/create_event.html', context)
|
|
elif request.method == 'POST':
|
|
if 'common' in request.POST and request.POST['common'] != '':
|
|
new_event.parent = CommonEvent.objects.get(id=request.POST['common'])
|
|
form = NewTeamEventForm(request.POST, instance=new_event)
|
|
if form.is_valid:
|
|
new_event = form.save()
|
|
Attendee.objects.create(event=new_event, user=request.user.profile, role=Attendee.HOST, status=Attendee.YES)
|
|
|
|
if form.cleaned_data.get('recurrences', None):
|
|
new_series = EventSeries.from_event(new_event, recurrences=form.cleaned_data['recurrences'])
|
|
new_series.save()
|
|
new_event.series = new_series
|
|
new_event.save()
|
|
return redirect('add-place', new_event.id)
|
|
else:
|
|
context = {
|
|
'event': new_event,
|
|
'team': team,
|
|
'event_form': form,
|
|
}
|
|
return render(request, 'get_together/events/create_event.html', context)
|
|
else:
|
|
return redirect('home')
|
|
|
|
def add_event_photo(request, event_id):
|
|
event = get_object_or_404(Event, id=event_id)
|
|
if not request.user.profile.can_edit_event(event):
|
|
messages.add_message(request, messages.WARNING, message=_('You can not make changes to this event.'))
|
|
return redirect(event.get_absolute_url())
|
|
|
|
if request.method == 'GET':
|
|
form = UploadEventPhotoForm()
|
|
|
|
context = {
|
|
'event': event,
|
|
'photo_form': form,
|
|
}
|
|
return render(request, 'get_together/events/add_photo.html', context)
|
|
elif request.method == 'POST':
|
|
new_photo = EventPhoto(event=event)
|
|
form = UploadEventPhotoForm(request.POST, request.FILES, instance=new_photo)
|
|
if form.is_valid():
|
|
form.save()
|
|
return redirect(event.get_absolute_url())
|
|
else:
|
|
context = {
|
|
'event': event,
|
|
'photo_form': form,
|
|
}
|
|
return render(request, 'get_together/events/add_photo.html', context)
|
|
else:
|
|
return redirect('home')
|
|
|
|
def add_place_to_event(request, event_id):
|
|
event = get_object_or_404(Event, id=event_id)
|
|
if not request.user.profile.can_edit_event(event):
|
|
messages.add_message(request, messages.WARNING, message=_('You can not make changes to this event.'))
|
|
return redirect(event.get_absolute_url())
|
|
|
|
if request.method == 'GET':
|
|
form = NewPlaceForm()
|
|
|
|
context = {
|
|
'event': event,
|
|
'place_form': form,
|
|
}
|
|
return render(request, 'get_together/places/create_place.html', context)
|
|
elif request.method == 'POST':
|
|
form = NewPlaceForm(request.POST)
|
|
if form.is_valid:
|
|
if request.POST.get('id', None):
|
|
form.instance.id = request.POST.get('id')
|
|
new_place = form.save()
|
|
event.place = new_place
|
|
event.save()
|
|
if event.series is not None and event.series.place is None:
|
|
event.series.place = new_place;
|
|
event.series.save()
|
|
return redirect('share-event', event.id)
|
|
else:
|
|
context = {
|
|
'event': event,
|
|
'place_form': form,
|
|
}
|
|
return render(request, 'get_together/places/create_place.html', context)
|
|
else:
|
|
return redirect('home')
|
|
|
|
def add_place_to_series(request, series_id):
|
|
series = get_object_or_404(EventSeries, id=series_id)
|
|
if not request.user.profile.can_edit_series(series):
|
|
messages.add_message(request, messages.WARNING, message=_('You can not make changes to this event.'))
|
|
return redirect(series.get_absolute_url())
|
|
|
|
if request.method == 'GET':
|
|
form = NewPlaceForm()
|
|
|
|
context = {
|
|
'series': series,
|
|
'place_form': form,
|
|
}
|
|
return render(request, 'get_together/places/add_place_to_series.html', context)
|
|
elif request.method == 'POST':
|
|
form = NewPlaceForm(request.POST)
|
|
if form.is_valid:
|
|
if request.POST.get('id', None):
|
|
form.instance.id = request.POST.get('id')
|
|
new_place = form.save()
|
|
series.place = new_place
|
|
series.save()
|
|
return redirect('show-series', series.id, series.slug)
|
|
else:
|
|
context = {
|
|
'series': series,
|
|
'place_form': form,
|
|
}
|
|
return render(request, 'get_together/places/add_place_to_series.html', context)
|
|
else:
|
|
return redirect('home')
|
|
|
|
def share_event(request, event_id):
|
|
event = get_object_or_404(Event, id=event_id)
|
|
context = {
|
|
'event': event,
|
|
}
|
|
return render(request, 'get_together/events/share_event.html', context)
|
|
|
|
def edit_event(request, event_id):
|
|
event = get_object_or_404(Event, id=event_id)
|
|
|
|
if not request.user.profile.can_edit_event(event):
|
|
messages.add_message(request, messages.WARNING, message=_('You can not make changes to this event.'))
|
|
return redirect(event.get_absolute_url())
|
|
|
|
if request.method == 'GET':
|
|
form = TeamEventForm(instance=event)
|
|
|
|
context = {
|
|
'team': event.team,
|
|
'event': event,
|
|
'event_form': form,
|
|
}
|
|
return render(request, 'get_together/events/edit_event.html', context)
|
|
elif request.method == 'POST':
|
|
form = TeamEventForm(request.POST,instance=event)
|
|
if form.is_valid:
|
|
new_event = form.save()
|
|
return redirect(new_event.get_absolute_url())
|
|
else:
|
|
context = {
|
|
'team': event.team,
|
|
'event': event,
|
|
'event_form': form,
|
|
}
|
|
return render(request, 'get_together/events/edit_event.html', context)
|
|
else:
|
|
return redirect('home')
|
|
|
|
def delete_event(request, event_id):
|
|
event = get_object_or_404(Event, id=event_id)
|
|
if not request.user.profile.can_edit_event(event):
|
|
messages.add_message(request, messages.WARNING, message=_('You can not make changes to this event.'))
|
|
return redirect(event.get_absolute_url())
|
|
|
|
if request.method == 'GET':
|
|
form = DeleteEventForm()
|
|
|
|
context = {
|
|
'team': event.team,
|
|
'event': event,
|
|
'delete_form': form,
|
|
}
|
|
return render(request, 'get_together/events/delete_event.html', context)
|
|
elif request.method == 'POST':
|
|
form = DeleteEventForm(request.POST)
|
|
if form.is_valid() and form.cleaned_data['confirm']:
|
|
team_id = event.team_id
|
|
event.delete()
|
|
return redirect('show-team', team_id)
|
|
else:
|
|
context = {
|
|
'team': event.team,
|
|
'event': event,
|
|
'delete_form': form,
|
|
}
|
|
return render(request, 'get_together/events/delete_event.html', context)
|
|
else:
|
|
return redirect('home')
|
|
|
|
def edit_series(request, series_id):
|
|
series = get_object_or_404(EventSeries, id=series_id)
|
|
|
|
if not request.user.profile.can_edit_series(series):
|
|
messages.add_message(request, messages.WARNING, message=_('You can not make changes to this event.'))
|
|
return redirect(series.get_absolute_url())
|
|
|
|
if request.method == 'GET':
|
|
form = EventSeriesForm(instance=series)
|
|
|
|
context = {
|
|
'team': series.team,
|
|
'series': series,
|
|
'series_form': form,
|
|
}
|
|
return render(request, 'get_together/events/edit_series.html', context)
|
|
elif request.method == 'POST':
|
|
form = EventSeriesForm(request.POST,instance=series)
|
|
if form.is_valid:
|
|
new_series = form.save()
|
|
return redirect(new_series.get_absolute_url())
|
|
else:
|
|
context = {
|
|
'team': event.team,
|
|
'series': series,
|
|
'series_form': form,
|
|
}
|
|
return render(request, 'get_together/events/edit_series.html', context)
|
|
else:
|
|
return redirect('home')
|
|
|
|
def delete_series(request, series_id):
|
|
series = get_object_or_404(EventSeries, id=series_id)
|
|
if not request.user.profile.can_edit_series(series):
|
|
messages.add_message(request, messages.WARNING, message=_('You can not make changes to this event.'))
|
|
return redirect(series.get_absolute_url())
|
|
|
|
if request.method == 'GET':
|
|
form = DeleteEventSeriesForm()
|
|
|
|
context = {
|
|
'team': series.team,
|
|
'series': series,
|
|
'delete_form': form,
|
|
}
|
|
return render(request, 'get_together/events/delete_series.html', context)
|
|
elif request.method == 'POST':
|
|
form = DeleteEventSeriesForm(request.POST)
|
|
if form.is_valid() and form.cleaned_data['confirm']:
|
|
team_id = series.team_id
|
|
series.delete()
|
|
return redirect('show-team', team_id)
|
|
else:
|
|
context = {
|
|
'team': series.team,
|
|
'series': series,
|
|
'delete_form': form,
|
|
}
|
|
return render(request, 'get_together/events/delete_series.html', context)
|
|
else:
|
|
return redirect('home')
|
|
|
|
def show_common_event(request, event_id, event_slug):
|
|
event = get_object_or_404(CommonEvent, id=event_id)
|
|
context = {
|
|
'org': event.organization,
|
|
'common_event': event,
|
|
'can_edit_event': False,
|
|
}
|
|
return render(request, 'get_together/orgs/show_common_event.html', context)
|
|
|
|
@login_required
|
|
def create_common_event(request, org_slug):
|
|
org = get_object_or_404(Organization, slug=org_slug)
|
|
if not request.user.profile.can_create_common_event(org):
|
|
messages.add_message(request, messages.WARNING, message=_('You can not create events for this org.'))
|
|
return redirect('show-org', org_id=org.pk)
|
|
|
|
new_event = CommonEvent(organization=org, created_by=request.user.profile)
|
|
if request.method == 'GET':
|
|
form = NewCommonEventForm(instance=new_event)
|
|
|
|
context = {
|
|
'org': org,
|
|
'event_form': form,
|
|
}
|
|
return render(request, 'get_together/orgs/create_common_event.html', context)
|
|
elif request.method == 'POST':
|
|
form = NewCommonEventForm(request.POST, instance=new_event)
|
|
if form.is_valid:
|
|
new_event = form.save()
|
|
return redirect('show-common-event', new_event.id, new_event.slug)
|
|
else:
|
|
context = {
|
|
'org': org,
|
|
'event_form': form,
|
|
}
|
|
return render(request, 'get_together/orgs/create_common_event.html', context)
|
|
else:
|
|
return redirect('home')
|
|
|
|
def share_common_event(request, event_id):
|
|
event = get_object_or_404(CommonEvent, id=event_id)
|
|
context = {
|
|
'event': event,
|
|
}
|
|
return render(request, 'get_together/orgs/share_common_event.html', context)
|
|
|
|
@login_required
|
|
def create_common_event_team_select(request, event_id):
|
|
teams = request.user.profile.moderating
|
|
if len(teams) == 1:
|
|
return redirect(reverse('create-event', kwargs={'team_id':teams[0].id}) + '?common=%s'%event_id)
|
|
context = {
|
|
'common_event_id': event_id,
|
|
'teams': teams
|
|
}
|
|
return render(request, 'get_together/orgs/create_common_event_team_select.html', context)
|
|
|
|
|