PonyConf/proposals/views.py

88 lines
3.0 KiB
Python

from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.sites.shortcuts import get_current_site
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.core.exceptions import PermissionDenied
from accounts.models import *
from proposals.models import *
from proposals.forms import *
def home(request):
return render(request, 'proposals/home.html')
@login_required
def talk_list(request):
talks = Talk.objects.filter(site=get_current_site(request))
mine = talks.filter(speakers=request.user)
others = talks.exclude(speakers=request.user)
return render(request, 'proposals/talks.html', {
'my_talks': mine,
'other_talks': others,
})
@login_required
def talk_list_by_topic(request, topic):
topic = get_object_or_404(Topic, site=get_current_site(request), slug=topic)
talks = Talk.objects.filter(topics=topic)
return render(request, 'proposals/talk_list.html', {
'title': 'Talks related to %s:' % topic.name,
'talks': talks,
})
@login_required
def talk_list_by_speaker(request, speaker):
speaker = get_object_or_404(User, username=speaker)
talks = Talk.objects.filter(site=get_current_site(request), speakers=speaker)
return render(request, 'proposals/talk_list.html', {
'title': 'Talks with %s:' % (speaker.get_full_name() or speaker.username),
'talks': talks,
})
@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()
if not request.user.is_superuser and not talk.speakers.filter(username=request.user.username).exists(): # FIXME fine permissions
raise PermissionDenied()
form = TalkForm(request.POST or None, instance=talk)
if request.method == 'POST' and form.is_valid():
if talk:
talk = form.save()
messages.success(request, 'Talk modified successfully!')
else:
talk = form.save(commit=False)
talk.site = get_current_site(request)
talk.save()
speach = Speach(user=request.user,talk=talk,order=1)
speach.save()
messages.success(request, 'Talk proposed successfully!')
return redirect('show-talk', talk.slug)
return render(request, 'proposals/talk_edit.html', {
'form': form,
})
@login_required
def talk_details(request, talk):
talk = get_object_or_404(Talk, slug=talk)
return render(request, 'proposals/talk_details.html', {
'talk': talk,
})
@login_required
def topic_list(request):
topics = Topic.objects.filter(site=get_current_site(request))
return render(request, 'proposals/topic_list.html', {
'topics': topics,
})
@login_required
def user_details(request, username):
user = get_object_or_404(User, username=username)
return render(request, 'proposals/user_details.html', {
'user': user,
})