2016-06-07 20:59:13 +00:00
|
|
|
from django.contrib import messages
|
2016-06-11 13:47:08 +00:00
|
|
|
from django.contrib.auth.decorators import login_required
|
2016-06-12 16:35:59 +00:00
|
|
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
2016-06-11 13:47:08 +00:00
|
|
|
from django.contrib.sites.shortcuts import get_current_site
|
2016-06-07 20:59:13 +00:00
|
|
|
from django.core.exceptions import PermissionDenied
|
2016-06-11 13:47:08 +00:00
|
|
|
from django.shortcuts import get_object_or_404, redirect, render
|
2016-06-12 16:35:59 +00:00
|
|
|
from django.views.generic import DetailView, ListView
|
2016-06-07 20:59:13 +00:00
|
|
|
|
2016-06-12 15:21:17 +00:00
|
|
|
from accounts.models import Profile, Speaker
|
2016-06-11 13:47:08 +00:00
|
|
|
from proposals.forms import TalkForm
|
|
|
|
from proposals.models import Speach, Talk, Topic
|
2016-06-07 20:59:13 +00:00
|
|
|
|
|
|
|
|
|
|
|
def home(request):
|
|
|
|
return render(request, 'proposals/home.html')
|
|
|
|
|
2016-06-11 13:47:08 +00:00
|
|
|
|
2016-06-07 20:59:13 +00:00
|
|
|
@login_required
|
|
|
|
def talk_list(request):
|
|
|
|
return render(request, 'proposals/talks.html', {
|
2016-06-12 16:35:59 +00:00
|
|
|
'my_talks': Talk.on_site.filter(speakers__user=request.user),
|
|
|
|
'other_talks': Talk.on_site.exclude(speakers__user=request.user),
|
2016-06-07 20:59:13 +00:00
|
|
|
})
|
|
|
|
|
2016-06-11 13:47:08 +00:00
|
|
|
|
2016-06-07 20:59:13 +00:00
|
|
|
@login_required
|
|
|
|
def talk_list_by_topic(request, topic):
|
2016-06-12 16:35:59 +00:00
|
|
|
topic = get_object_or_404(Topic, slug=topic)
|
2016-06-07 20:59:13 +00:00
|
|
|
return render(request, 'proposals/talk_list.html', {
|
2016-06-12 16:35:59 +00:00
|
|
|
'title': 'Talks related to %s:' % topic,
|
|
|
|
'talks': Talk.on_site.filter(topics=topic),
|
2016-06-07 20:59:13 +00:00
|
|
|
})
|
|
|
|
|
2016-06-11 13:47:08 +00:00
|
|
|
|
2016-06-07 20:59:13 +00:00
|
|
|
@login_required
|
|
|
|
def talk_list_by_speaker(request, speaker):
|
2016-06-12 15:11:11 +00:00
|
|
|
speaker = get_object_or_404(Speaker, user__username=speaker)
|
2016-06-07 20:59:13 +00:00
|
|
|
return render(request, 'proposals/talk_list.html', {
|
2016-06-11 15:28:39 +00:00
|
|
|
'title': 'Talks with %s:' % speaker,
|
2016-06-12 16:35:59 +00:00
|
|
|
'talks': Talk.on_site.filter(speakers=speaker),
|
2016-06-07 20:59:13 +00:00
|
|
|
})
|
|
|
|
|
2016-06-11 13:47:08 +00:00
|
|
|
|
2016-06-07 20:59:13 +00:00
|
|
|
@login_required
|
|
|
|
def talk_edit(request, talk=None):
|
|
|
|
if talk:
|
|
|
|
talk = get_object_or_404(Talk, slug=talk)
|
|
|
|
if talk.site != get_current_site(request):
|
|
|
|
raise PermissionDenied()
|
2016-06-12 14:40:23 +00:00
|
|
|
if not request.user.is_superuser and not talk.speakers.filter(user=request.user).exists():
|
2016-06-11 13:47:08 +00:00
|
|
|
# FIXME fine permissions
|
2016-06-07 20:59:13 +00:00
|
|
|
raise PermissionDenied()
|
|
|
|
form = TalkForm(request.POST or None, instance=talk)
|
|
|
|
if request.method == 'POST' and form.is_valid():
|
2016-06-11 13:42:40 +00:00
|
|
|
if hasattr(talk, 'id'):
|
2016-06-07 20:59:13 +00:00
|
|
|
talk = form.save()
|
|
|
|
messages.success(request, 'Talk modified successfully!')
|
|
|
|
else:
|
2016-06-11 13:42:40 +00:00
|
|
|
site = get_current_site(request)
|
2016-06-07 20:59:13 +00:00
|
|
|
talk = form.save(commit=False)
|
2016-06-11 13:42:40 +00:00
|
|
|
talk.site = site
|
2016-06-07 20:59:13 +00:00
|
|
|
talk.save()
|
2016-06-12 15:11:11 +00:00
|
|
|
speaker = Speaker.on_site.get_or_create(user=request.user, site=site)[0]
|
2016-06-12 16:35:59 +00:00
|
|
|
Speach.objects.create(speaker=speaker, talk=talk)
|
2016-06-07 20:59:13 +00:00
|
|
|
messages.success(request, 'Talk proposed successfully!')
|
2016-06-12 16:35:59 +00:00
|
|
|
return redirect(talk.get_absolute_url())
|
2016-06-07 20:59:13 +00:00
|
|
|
return render(request, 'proposals/talk_edit.html', {
|
|
|
|
'form': form,
|
|
|
|
})
|
|
|
|
|
2016-06-11 13:47:08 +00:00
|
|
|
|
2016-06-12 16:35:59 +00:00
|
|
|
class TalkDetail(LoginRequiredMixin, DetailView):
|
|
|
|
queryset = Talk.on_site.all()
|
2016-06-07 20:59:13 +00:00
|
|
|
|
2016-06-11 13:47:08 +00:00
|
|
|
|
2016-06-12 16:35:59 +00:00
|
|
|
class TopicList(LoginRequiredMixin, ListView):
|
|
|
|
model = Topic
|
2016-06-07 20:59:13 +00:00
|
|
|
|
2016-06-11 13:47:08 +00:00
|
|
|
|
2016-06-12 16:35:59 +00:00
|
|
|
class SpeakerList(LoginRequiredMixin, ListView):
|
|
|
|
queryset = Speaker.on_site.all()
|
2016-06-08 21:22:23 +00:00
|
|
|
|
2016-06-11 13:47:08 +00:00
|
|
|
|
2016-06-07 20:59:13 +00:00
|
|
|
@login_required
|
|
|
|
def user_details(request, username):
|
|
|
|
return render(request, 'proposals/user_details.html', {
|
2016-06-12 16:35:59 +00:00
|
|
|
'user': get_object_or_404(Profile, user__username=username),
|
2016-06-07 20:59:13 +00:00
|
|
|
})
|