Files @ 464d85b36a64
Branch filter:

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

Hiroshi Miura
Display proposal result status in proposal admin change lists

feedback from pycon development

commit 3401cdd8253d86e166d980a1d1eb5ba2de01932d
Author: Dan Poirier <dpoirier@caktusgroup.com>
Date: Thu Jun 6 15:10:57 2013 -0400

Signed-off-by: Hiroshi Miura <miurahr@linux.com>
2b7f5546a094
347617ead3c3
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
347617ead3c3
2b7f5546a094
2b7f5546a094
347617ead3c3
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
36ab6d599ffc
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
36ab6d599ffc
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
347617ead3c3
36ab6d599ffc
2b7f5546a094
347617ead3c3
347617ead3c3
347617ead3c3
347617ead3c3
347617ead3c3
4c385bafd5b1
4c385bafd5b1
347617ead3c3
347617ead3c3
36ab6d599ffc
347617ead3c3
347617ead3c3
347617ead3c3
347617ead3c3
36ab6d599ffc
347617ead3c3
347617ead3c3
36ab6d599ffc
347617ead3c3
347617ead3c3
347617ead3c3
347617ead3c3
347617ead3c3
347617ead3c3
347617ead3c3
347617ead3c3
36ab6d599ffc
347617ead3c3
347617ead3c3
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
347617ead3c3
2b7f5546a094
347617ead3c3
2b7f5546a094
36ab6d599ffc
36ab6d599ffc
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
5944bb5577f2
2b7f5546a094
2b7f5546a094
2b7f5546a094
36ab6d599ffc
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
36ab6d599ffc
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
2b7f5546a094
9e794bd66a19
2b7f5546a094
c1ff1546fe43
c1ff1546fe43
2b7f5546a094
36ab6d599ffc
9e794bd66a19
2b7f5546a094
c1ff1546fe43
9e794bd66a19
from django.core.exceptions import ObjectDoesNotExist
from django.http import Http404
from django.shortcuts import render, redirect, get_object_or_404

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

from symposion.proposals.models import ProposalBase
from symposion.speakers.forms import SpeakerForm
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,
    })


@login_required
def speaker_create_staff(request, pk):
    user = get_object_or_404(User, pk=pk)
    if not request.user.is_staff:
        raise Http404

    try:
        return redirect(user.speaker_profile)
    except ObjectDoesNotExist:
        pass

    if request.method == "POST":
        form = SpeakerForm(request.POST, request.FILES)

        if form.is_valid():
            speaker = form.save(commit=False)
            speaker.user = user
            speaker.save()
            messages.success(request, "Speaker profile created.")
            return redirect("user_list")
    else:
        form = SpeakerForm(initial={"name": 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.is_staff:
            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):
    speaker = get_object_or_404(Speaker, pk=pk)
    presentations = speaker.all_presentations
    if not presentations and not request.user.is_staff:
        raise Http404()

    return render(request, "speakers/speaker_profile.html", {
        "speaker": speaker,
        "presentations": presentations,
    })