@@ -144,24 +144,25 @@ def review_section(request, section_slug, assigned=False, reviewed="all"):
@login_required
def review_all_proposals_csv(request):
''' Returns a CSV representation of all of the proposals this user has
permisison to review. '''
response = HttpResponse("text/csv")
response['Content-Disposition'] = 'attachment; filename="proposals.csv"'
writer = csv.writer(response, quoting=csv.QUOTE_NONNUMERIC)
queryset = ProposalBase.objects.filter()
# The fields from each proposal object to report in the csv
fields = [
"id", "proposal_type", "speaker_name","speaker_email", "title",
"submitted", "cancelled", "status",
"score", "total_votes", "minus_two", "minus_one", "plus_one", "plus_two",
]
output = StringIO.StringIO()
writer = csv.writer(output, quoting=csv.QUOTE_NONNUMERIC)
# Fields are the heading
writer.writerow(fields)
for proposal in proposals_generator(request, queryset, check_speaker=False):
proposal.speaker_name = proposal.speaker.name
@@ -177,13 +178,13 @@ def review_all_proposals_csv(request):
for i, item in enumerate(csv_line):
if isinstance(item, unicode):
csv_line[i] = item.encode("utf8")
writer.writerow(csv_line)
return HttpResponse(output.getvalue(), "text/csv")
return response
def review_random_proposal(request, section_slug):
# lca2017 #16 view for random proposal
@@ -234,13 +235,13 @@ def review_list(request, section_slug, user_pk):
proposals = proposals_generator(request, proposals, user_pk=user_pk, check_speaker=not admin)
ctx = {
"proposals": proposals,
}
return (request, "symposion/reviews/review_list.html", ctx)
return render(request, "symposion/reviews/review_list.html", ctx)
def review_admin(request, section_slug):
if not request.user.has_perm("reviews.can_manage_%s" % section_slug):
@@ -254,29 +255,43 @@ def review_admin(request, section_slug):
user = membership.user
if user.pk in already_seen:
continue
already_seen.add(user.pk)
user.comment_count = Review.objects.filter(user=user).count()
user.total_votes = LatestVote.objects.filter(user=user).count()
user.plus_two = LatestVote.objects.filter(
user_votes = LatestVote.objects.filter(
user=user,
vote=LatestVote.VOTES.PLUS_TWO
proposal__kind__section__slug=section_slug,
)
print section_slug
print [vote.proposal.kind.section.slug for vote in user_votes]
user.total_votes = user_votes.exclude(
vote=LatestVote.VOTES.ABSTAIN,
).count()
user.plus_one = LatestVote.objects.filter(
vote=LatestVote.VOTES.PLUS_ONE
user.plus_two = user_votes.filter(
vote=LatestVote.VOTES.PLUS_TWO,
user.minus_one = LatestVote.objects.filter(
vote=LatestVote.VOTES.MINUS_ONE
user.plus_one = user_votes.filter(
vote=LatestVote.VOTES.PLUS_ONE,
user.minus_two = LatestVote.objects.filter(
vote=LatestVote.VOTES.MINUS_TWO
user.minus_one = user_votes.filter(
vote=LatestVote.VOTES.MINUS_ONE,
user.minus_two = user_votes.filter(
vote=LatestVote.VOTES.MINUS_TWO,
user.abstain = user_votes.filter(
if user.total_votes == 0:
user.average = "-"
else:
user.average = (
user.plus_two + user.plus_one +
user.minus_one + user.minus_two
) / (user.total_votes * 1.0)
yield user
"section_slug": section_slug,
"reviewers": reviewers(),
@@ -307,22 +322,28 @@ def review_detail(request, pk):
latest_vote = None
if request.method == "POST":
if request.user in speakers:
return access_not_permitted(request)
if "vote_submit" in request.POST:
if "vote_submit" in request.POST or "vote_submit_and_random" 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)
if "vote_submit_and_random" in request.POST:
next_page = redirect("user_random", proposal.kind.section.slug)
next_page["Location"] += "#invalid_fragment" # Hack.
next_page = redirect(request.path)
return next_page
message_form = SpeakerCommentForm()
elif "message_submit" in request.POST and admin:
message_form = SpeakerCommentForm(request.POST)
if message_form.is_valid():