Merge pull request #24 from lca2017/chrisjrn/16-random-proposal-link
#16 adds view for jumping to a random proposal
This commit is contained in:
commit
c23f2b5753
2 changed files with 30 additions and 1 deletions
|
@ -9,6 +9,7 @@ from .views import (
|
||||||
result_notification,
|
result_notification,
|
||||||
result_notification_prepare,
|
result_notification_prepare,
|
||||||
result_notification_send,
|
result_notification_send,
|
||||||
|
review_random_proposal,
|
||||||
review_detail,
|
review_detail,
|
||||||
review_delete,
|
review_delete,
|
||||||
review_assignments,
|
review_assignments,
|
||||||
|
@ -19,6 +20,7 @@ urlpatterns = [
|
||||||
url(r"^section/(?P<section_slug>[\w\-]+)/all/$", review_section, {"reviewed": "all"}, name="review_section"),
|
url(r"^section/(?P<section_slug>[\w\-]+)/all/$", review_section, {"reviewed": "all"}, name="review_section"),
|
||||||
url(r"^section/(?P<section_slug>[\w\-]+)/reviewed/$", review_section, {"reviewed": "reviewed"}, name="user_reviewed"),
|
url(r"^section/(?P<section_slug>[\w\-]+)/reviewed/$", review_section, {"reviewed": "reviewed"}, name="user_reviewed"),
|
||||||
url(r"^section/(?P<section_slug>[\w\-]+)/not_reviewed/$", review_section, {"reviewed": "not_reviewed"}, name="user_not_reviewed"),
|
url(r"^section/(?P<section_slug>[\w\-]+)/not_reviewed/$", review_section, {"reviewed": "not_reviewed"}, name="user_not_reviewed"),
|
||||||
|
url(r"^section/(?P<section_slug>[\w\-]+)/random/$", review_random_proposal, name="user_random"),
|
||||||
url(r"^section/(?P<section_slug>[\w\-]+)/assignments/$", review_section, {"assigned": True}, name="review_section_assignments"),
|
url(r"^section/(?P<section_slug>[\w\-]+)/assignments/$", review_section, {"assigned": True}, name="review_section_assignments"),
|
||||||
url(r"^section/(?P<section_slug>[\w\-]+)/status/$", review_status, name="review_status"),
|
url(r"^section/(?P<section_slug>[\w\-]+)/status/$", review_status, name="review_status"),
|
||||||
url(r"^section/(?P<section_slug>[\w\-]+)/status/(?P<key>\w+)/$", review_status, name="review_status"),
|
url(r"^section/(?P<section_slug>[\w\-]+)/status/(?P<key>\w+)/$", review_status, name="review_status"),
|
||||||
|
@ -29,6 +31,7 @@ urlpatterns = [
|
||||||
url(r"^section/(?P<section_slug>[\w\-]+)/notification/(?P<status>\w+)/prepare/$", result_notification_prepare, name="result_notification_prepare"),
|
url(r"^section/(?P<section_slug>[\w\-]+)/notification/(?P<status>\w+)/prepare/$", result_notification_prepare, name="result_notification_prepare"),
|
||||||
url(r"^section/(?P<section_slug>[\w\-]+)/notification/(?P<status>\w+)/send/$", result_notification_send, name="result_notification_send"),
|
url(r"^section/(?P<section_slug>[\w\-]+)/notification/(?P<status>\w+)/send/$", result_notification_send, name="result_notification_send"),
|
||||||
|
|
||||||
|
|
||||||
url(r"^review/(?P<pk>\d+)/$", review_detail, name="review_detail"),
|
url(r"^review/(?P<pk>\d+)/$", review_detail, name="review_detail"),
|
||||||
|
|
||||||
url(r"^(?P<pk>\d+)/delete/$", review_delete, name="review_delete"),
|
url(r"^(?P<pk>\d+)/delete/$", review_delete, name="review_delete"),
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import random
|
||||||
|
|
||||||
from django.core.mail import send_mass_mail
|
from django.core.mail import send_mass_mail
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.http import HttpResponseBadRequest, HttpResponseNotAllowed
|
from django.http import HttpResponseBadRequest, HttpResponseNotAllowed
|
||||||
|
@ -103,6 +105,30 @@ def review_section(request, section_slug, assigned=False, reviewed="all"):
|
||||||
return render(request, "symposion/reviews/review_list.html", ctx)
|
return render(request, "symposion/reviews/review_list.html", ctx)
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def review_random_proposal(request, section_slug):
|
||||||
|
# lca2017 #16 view for random proposal
|
||||||
|
|
||||||
|
if not request.user.has_perm("reviews.can_review_%s" % section_slug):
|
||||||
|
return access_not_permitted(request)
|
||||||
|
|
||||||
|
section = get_object_or_404(ProposalSection, section__slug=section_slug)
|
||||||
|
queryset = ProposalBase.objects.filter(kind__section=section.section)
|
||||||
|
# Remove ones already reviewed
|
||||||
|
queryset = queryset.exclude(reviews__user=request.user)
|
||||||
|
# Remove talks the reviewer can't vote on -- their own.
|
||||||
|
queryset = queryset.exclude(speaker__user=request.user)
|
||||||
|
queryset = queryset.exclude(additional_speakers__user=request.user)
|
||||||
|
|
||||||
|
if len(queryset) == 0:
|
||||||
|
return redirect("review_section", section_slug=section_slug, reviewed="all")
|
||||||
|
|
||||||
|
# Realistically, there shouldn't be all that many proposals to choose
|
||||||
|
# from, so this should be cheap.
|
||||||
|
chosen = random.choice(queryset.all())
|
||||||
|
return redirect("review_detail", pk=chosen.pk)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def review_list(request, section_slug, user_pk):
|
def review_list(request, section_slug, user_pk):
|
||||||
|
|
||||||
|
@ -124,7 +150,7 @@ def review_list(request, section_slug, user_pk):
|
||||||
ctx = {
|
ctx = {
|
||||||
"proposals": proposals,
|
"proposals": proposals,
|
||||||
}
|
}
|
||||||
return render(request, "symposion/reviews/review_list.html", ctx)
|
return (request, "symposion/reviews/review_list.html", ctx)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
|
Loading…
Reference in a new issue