def proposal_detail(request, pk): queryset = Proposal.objects.select_related("speaker", "speaker__user") proposal = get_object_or_404(queryset, pk=pk) if request.user not in [p.user for p in proposal.speakers()]: raise Http404() from symposion.review.forms import SpeakerCommentForm message_form = SpeakerCommentForm() if request.method == "POST": message_form = SpeakerCommentForm(request.POST) if message_form.is_valid(): message = message_form.save(commit=False) message.user = request.user message.proposal = proposal message.save() ProposalMessage = SpeakerCommentForm.Meta.model reviewers = User.objects.filter( id__in=ProposalMessage.objects.filter( proposal=proposal).exclude( user=request.user).distinct().values_list("user", flat=True)) for reviewer in reviewers: ctx = { "proposal": proposal, "message": message, "reviewer": True, } send_email([reviewer.email], "proposal_new_message", context=ctx) return redirect(request.path) else: message_form = SpeakerCommentForm() ctx = { "proposal": proposal, "message_form": message_form, } ctx = RequestContext(request, ctx) return render_to_response("proposals/proposal_detail.html", ctx)
def review_detail(request, pk): proposals = Proposal.objects.select_related("result") proposal = get_object_or_404(proposals, pk=pk) admin = request.user.groups.filter(name="reviewers-admins").exists() speakers = [s.user for s in proposal.speakers()] if proposal.kind.name.lower() == "tutorial": if not request.user.groups.filter(name="reviewers-tutorials").exists(): return access_not_permitted(request) else: if not request.user.groups.filter(name="reviewers").exists(): return access_not_permitted(request) if not admin and request.user in speakers: return access_not_permitted(request) try: latest_vote = LatestVote.objects.get(proposal=proposal, user=request.user) except LatestVote.DoesNotExist: latest_vote = None if request.method == "POST": if request.user in speakers: return access_not_permitted(request) if hasattr(proposal, "invited") and proposal.invited: return access_not_permitted(request) if "vote_submit" in request.POST: review_form = ReviewForm(request.POST) if review_form.is_valid(): review = review_form.save(commit=False) review.user = request.user review.proposal = proposal review.save() return redirect(request.path) else: message_form = SpeakerCommentForm() elif "message_submit" in request.POST: message_form = SpeakerCommentForm(request.POST) if message_form.is_valid(): message = message_form.save(commit=False) message.user = request.user message.proposal = proposal message.save() for speaker in speakers: if speaker and speaker.email: ctx = { "proposal": proposal, "message": message, "reviewer": False, } send_email([speaker.email], "proposal_new_message", context=ctx) return redirect(request.path) elif "result_submit" in request.POST: if admin: result = request.POST["result_submit"] if result == "accept": proposal.result.accepted = True proposal.result.save() elif result == "reject": proposal.result.accepted = False proposal.result.save() elif result == "undecide": proposal.result.accepted = None proposal.result.save() return redirect(request.path) else: initial = {} if latest_vote: initial["vote"] = latest_vote.vote if request.user in speakers: review_form = None else: review_form = ReviewForm(initial=initial) message_form = SpeakerCommentForm() proposal.comment_count = proposal.result.comment_count proposal.total_votes = proposal.result.vote_count proposal.plus_one = proposal.result.plus_one proposal.plus_zero = proposal.result.plus_zero proposal.minus_zero = proposal.result.minus_zero proposal.minus_one = proposal.result.minus_one reviews = Review.objects.filter( proposal=proposal).order_by("-submitted_at") return render_to_response("review/review_detail.html", { "proposal": proposal, "latest_vote": latest_vote, "reviews": reviews, "review_form": review_form, "message_form": message_form, }, context_instance=RequestContext(request))