Merge pull request #40 from lca2017/chrisjrn/20160813
Makes the random proposal button take you to under reviewed proposals.
This commit is contained in:
		
						commit
						9e498544c2
					
				
					 1 changed files with 42 additions and 24 deletions
				
			
		| 
						 | 
					@ -68,6 +68,38 @@ def proposals_generator(request, queryset, user_pk=None, check_speaker=True):
 | 
				
			||||||
        yield obj
 | 
					        yield obj
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VOTE_THRESHOLD = settings.SYMPOSION_VOTE_THRESHOLD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					POSITIVE = "positive"
 | 
				
			||||||
 | 
					NEGATIVE = "negative"
 | 
				
			||||||
 | 
					INDIFFERENT = "indifferent"
 | 
				
			||||||
 | 
					CONTROVERSIAL = "controversial"
 | 
				
			||||||
 | 
					TOO_FEW = "too_few"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					REVIEW_STATUS_FILTERS = {
 | 
				
			||||||
 | 
					    # proposals with at least VOTE_THRESHOLD reviews and at least one +2 and no -2s, sorted by
 | 
				
			||||||
 | 
					    # the 'score'
 | 
				
			||||||
 | 
					    POSITIVE: lambda qs: qs.filter(result__vote_count__gte=VOTE_THRESHOLD, result__plus_two__gt=0,
 | 
				
			||||||
 | 
					                                result__minus_two=0).order_by("-result__score"),
 | 
				
			||||||
 | 
					    # proposals with at least VOTE_THRESHOLD reviews and at least one -2 and no +2s, reverse
 | 
				
			||||||
 | 
					    # sorted by the 'score'
 | 
				
			||||||
 | 
					    NEGATIVE: lambda qs: qs.filter(result__vote_count__gte=VOTE_THRESHOLD, result__minus_two__gt=0,
 | 
				
			||||||
 | 
					                                result__plus_two=0).order_by("result__score"),
 | 
				
			||||||
 | 
					    # proposals with at least VOTE_THRESHOLD reviews and neither a +2 or a -2, sorted by total
 | 
				
			||||||
 | 
					    # votes (lowest first)
 | 
				
			||||||
 | 
					    INDIFFERENT: lambda qs: qs.filter(result__vote_count__gte=VOTE_THRESHOLD, result__minus_two=0,
 | 
				
			||||||
 | 
					                                   result__plus_two=0).order_by("result__vote_count"),
 | 
				
			||||||
 | 
					    # proposals with at least VOTE_THRESHOLD reviews and both a +2 and -2, sorted by total
 | 
				
			||||||
 | 
					    # votes (highest first)
 | 
				
			||||||
 | 
					    CONTROVERSIAL: lambda qs: qs.filter(result__vote_count__gte=VOTE_THRESHOLD,
 | 
				
			||||||
 | 
					                                     result__plus_two__gt=0, result__minus_two__gt=0)
 | 
				
			||||||
 | 
					         .order_by("-result__vote_count"),
 | 
				
			||||||
 | 
					    # proposals with fewer than VOTE_THRESHOLD reviews
 | 
				
			||||||
 | 
					    TOO_FEW: lambda qs: qs.filter(result__vote_count__lt=VOTE_THRESHOLD)
 | 
				
			||||||
 | 
					        .order_by("result__vote_count"),
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Returns a list of all proposals, proposals reviewed by the user, or the proposals the user has
 | 
					# Returns a list of all proposals, proposals reviewed by the user, or the proposals the user has
 | 
				
			||||||
# yet to review depending on the link user clicks in dashboard
 | 
					# yet to review depending on the link user clicks in dashboard
 | 
				
			||||||
@login_required
 | 
					@login_required
 | 
				
			||||||
| 
						 | 
					@ -169,6 +201,15 @@ def review_random_proposal(request, section_slug):
 | 
				
			||||||
    if len(queryset) == 0:
 | 
					    if len(queryset) == 0:
 | 
				
			||||||
        return redirect("review_section", section_slug=section_slug, reviewed="all")
 | 
					        return redirect("review_section", section_slug=section_slug, reviewed="all")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Direct reviewers to underreviewed proposals
 | 
				
			||||||
 | 
					    too_few_set = REVIEW_STATUS_FILTERS[TOO_FEW](queryset)
 | 
				
			||||||
 | 
					    indifferent_set = REVIEW_STATUS_FILTERS[INDIFFERENT](queryset)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if len(too_few_set) > 0:
 | 
				
			||||||
 | 
					        queryset = too_few_set
 | 
				
			||||||
 | 
					    elif len(indifferent_set) > 0:
 | 
				
			||||||
 | 
					        queryset = indifferent_set
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Realistically, there shouldn't be all that many proposals to choose
 | 
					    # Realistically, there shouldn't be all that many proposals to choose
 | 
				
			||||||
    # from, so this should be cheap.
 | 
					    # from, so this should be cheap.
 | 
				
			||||||
    chosen = random.choice(queryset.all())
 | 
					    chosen = random.choice(queryset.all())
 | 
				
			||||||
| 
						 | 
					@ -381,8 +422,6 @@ def review_status(request, section_slug=None, key=None):
 | 
				
			||||||
    if not request.user.has_perm("reviews.can_review_%s" % section_slug):
 | 
					    if not request.user.has_perm("reviews.can_review_%s" % section_slug):
 | 
				
			||||||
        return access_not_permitted(request)
 | 
					        return access_not_permitted(request)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    VOTE_THRESHOLD = settings.SYMPOSION_VOTE_THRESHOLD
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ctx = {
 | 
					    ctx = {
 | 
				
			||||||
        "section_slug": section_slug,
 | 
					        "section_slug": section_slug,
 | 
				
			||||||
        "vote_threshold": VOTE_THRESHOLD,
 | 
					        "vote_threshold": VOTE_THRESHOLD,
 | 
				
			||||||
| 
						 | 
					@ -392,28 +431,7 @@ def review_status(request, section_slug=None, key=None):
 | 
				
			||||||
    if section_slug:
 | 
					    if section_slug:
 | 
				
			||||||
        queryset = queryset.filter(kind__section__slug=section_slug)
 | 
					        queryset = queryset.filter(kind__section__slug=section_slug)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    proposals = {
 | 
					    proposals = dict((key, filt(queryset)) for key, filt in REVIEW_STATUS_FILTERS.items())
 | 
				
			||||||
        # proposals with at least VOTE_THRESHOLD reviews and at least one +2 and no -2s, sorted by
 | 
					 | 
				
			||||||
        # the 'score'
 | 
					 | 
				
			||||||
        "positive": queryset.filter(result__vote_count__gte=VOTE_THRESHOLD, result__plus_two__gt=0,
 | 
					 | 
				
			||||||
                                    result__minus_two=0).order_by("-result__score"),
 | 
					 | 
				
			||||||
        # proposals with at least VOTE_THRESHOLD reviews and at least one -2 and no +2s, reverse
 | 
					 | 
				
			||||||
        # sorted by the 'score'
 | 
					 | 
				
			||||||
        "negative": queryset.filter(result__vote_count__gte=VOTE_THRESHOLD, result__minus_two__gt=0,
 | 
					 | 
				
			||||||
                                    result__plus_two=0).order_by("result__score"),
 | 
					 | 
				
			||||||
        # proposals with at least VOTE_THRESHOLD reviews and neither a +2 or a -2, sorted by total
 | 
					 | 
				
			||||||
        # votes (lowest first)
 | 
					 | 
				
			||||||
        "indifferent": queryset.filter(result__vote_count__gte=VOTE_THRESHOLD, result__minus_two=0,
 | 
					 | 
				
			||||||
                                       result__plus_two=0).order_by("result__vote_count"),
 | 
					 | 
				
			||||||
        # proposals with at least VOTE_THRESHOLD reviews and both a +2 and -2, sorted by total
 | 
					 | 
				
			||||||
        # votes (highest first)
 | 
					 | 
				
			||||||
        "controversial": queryset.filter(result__vote_count__gte=VOTE_THRESHOLD,
 | 
					 | 
				
			||||||
                                         result__plus_two__gt=0, result__minus_two__gt=0)
 | 
					 | 
				
			||||||
        .order_by("-result__vote_count"),
 | 
					 | 
				
			||||||
        # proposals with fewer than VOTE_THRESHOLD reviews
 | 
					 | 
				
			||||||
        "too_few": queryset.filter(result__vote_count__lt=VOTE_THRESHOLD)
 | 
					 | 
				
			||||||
        .order_by("result__vote_count"),
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    admin = request.user.has_perm("reviews.can_manage_%s" % section_slug)
 | 
					    admin = request.user.has_perm("reviews.can_manage_%s" % section_slug)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue