Files @ 1f9ceed0e1f2
Branch filter:

Location: symposion_app/symposion/speakers/views.py - annotation

Brian Rosner
added notification template handling in result_notification_prepare
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Q
from django.http import Http404, HttpResponse
from django.shortcuts import render, redirect, get_object_or_404
from django.template import RequestContext

from django.contrib import messages
from django.contrib.auth.decorators import login_required

from symposion.proposals.models import ProposalBase
from symposion.speakers.forms import SpeakerForm #, SignupForm
from symposion.speakers.models import Speaker


@login_required
def speaker_create(request):
    try:
        return redirect(request.user.speaker_profile)
    except ObjectDoesNotExist:
        pass
    
    if request.method == "POST":
        try:
            speaker = Speaker.objects.get(invite_email=request.user.email)
            found = True
        except Speaker.DoesNotExist:
            speaker = None
            found = False
        form = SpeakerForm(request.POST, request.FILES, instance=speaker)
        
        if form.is_valid():
            speaker = form.save(commit=False)
            speaker.user = request.user
            if not found:
                speaker.invite_email = None
            speaker.save()
            messages.success(request, "Speaker profile created.")
            return redirect("dashboard")
    else:
        form = SpeakerForm(initial = {"name": request.user.get_full_name()})
    
    return render(request, "speakers/speaker_create.html", {
        "form": form,    
    })


def speaker_create_token(request, token):
    speaker = get_object_or_404(Speaker, invite_token=token)
    request.session["pending-token"] = token
    if request.user.is_authenticated():
        # check for speaker profile
        try:
            existing_speaker = request.user.speaker_profile
        except ObjectDoesNotExist:
            pass
        else:
            del request.session["pending-token"]
            additional_speakers = ProposalBase.additional_speakers.through
            additional_speakers._default_manager.filter(
                speaker = speaker
            ).update(
                speaker = existing_speaker
            )
            messages.info(request, "You have been associated with all pending "
                "talk proposals")
            return redirect("dashboard")
    else:
        if not request.user.is_authenticated():
            return redirect("account_login")
    return redirect("speaker_create")


@login_required
def speaker_edit(request, pk=None):
    if pk is None:
        try:
            speaker = request.user.speaker_profile
        except Speaker.DoesNotExist:
            return redirect("speaker_create")
    else:
        if request.user.groups.filter(name="organizer").exists(): # @@@
            speaker = get_object_or_404(Speaker, pk=pk)
        else:
            raise Http404()
    
    if request.method == "POST":
        form = SpeakerForm(request.POST, request.FILES, instance=speaker)
        if form.is_valid():
            form.save()
            messages.success(request, "Speaker profile updated.")
            return redirect("dashboard")
    else:
        form = SpeakerForm(instance=speaker)
    
    return render(request, "speakers/speaker_edit.html", {
        "form": form,
    })


def speaker_profile(request, pk, template_name="speakers/speaker_profile.html", extra_context=None):
    
    if extra_context is None:
        extra_context = {}
    
    speaker = get_object_or_404(Speaker, pk=pk)
    
    # schedule may not be installed so we need to check for sessions
    if hasattr(speaker, "sessions"):
        sessions = speaker.sessions.exclude(slot=None).order_by("slot__start")
    else:
        sessions = []
    
    if not sessions:
        raise Http404()
    
    return render_to_response(template_name, dict({
        "speaker": speaker,
        "sessions": sessions,
        "timezone": settings.SCHEDULE_TIMEZONE,
    }, **extra_context), context_instance=RequestContext(request))