def helpful_vote(request, document_slug): """Vote for Helpful/Not Helpful document""" if 'revision_id' not in request.POST: return HttpResponseBadRequest() revision = get_object_or_404(Revision, id=smart_int(request.POST['revision_id'])) survey = None if revision.document.category == TEMPLATES_CATEGORY: return HttpResponseBadRequest() if not revision.has_voted(request): ua = request.META.get('HTTP_USER_AGENT', '')[:1000] # 1000 max_length vote = HelpfulVote(revision=revision, user_agent=ua) if 'helpful' in request.POST: vote.helpful = True message = _('Glad to hear it — thanks for the feedback!') else: message = _('Sorry to hear that.') # If user is over the limit, don't save but pretend everything is ok. if not request.limited: if request.user.is_authenticated(): vote.creator = request.user else: vote.anonymous_id = request.anonymous.anonymous_id vote.save() statsd.incr('wiki.vote') # Send a survey if flag is enabled and vote wasn't helpful. if 'helpful' not in request.POST: survey = jingo.render_to_string( request, 'wiki/includes/unhelpful_survey.html', {'vote_id': vote.id}) # Save vote metadata: referrer and search query (if available) for name in ['referrer', 'query', 'source']: val = request.POST.get(name) if val: vote.add_metadata(name, val) else: message = _('You already voted on this Article.') if request.is_ajax(): r = {'message': message} if survey: r.update(survey=survey) return HttpResponse(json.dumps(r)) return HttpResponseRedirect(revision.document.get_absolute_url())
def helpful_vote(request, document_slug): """Vote for Helpful/Not Helpful document""" if 'revision_id' not in request.POST: return HttpResponseBadRequest() revision = get_object_or_404( Revision, id=smart_int(request.POST['revision_id'])) survey = None if revision.document.category == TEMPLATES_CATEGORY: return HttpResponseBadRequest() if not revision.has_voted(request): ua = request.META.get('HTTP_USER_AGENT', '')[:1000] # 1000 max_length vote = HelpfulVote(revision=revision, user_agent=ua) if 'helpful' in request.POST: vote.helpful = True message = _('Glad to hear it — thanks for the feedback!') else: message = _('Sorry to hear that.') # If user is over the limit, don't save but pretend everything is ok. if not request.limited: if request.user.is_authenticated(): vote.creator = request.user else: vote.anonymous_id = request.anonymous.anonymous_id vote.save() statsd.incr('wiki.vote') # Send a survey if flag is enabled and vote wasn't helpful. if 'helpful' not in request.POST: survey = jingo.render_to_string( request, 'wiki/includes/unhelpful_survey.html', {'vote_id': vote.id}) # Save vote metadata: referrer and search query (if available) for name in ['referrer', 'query', 'source']: val = request.POST.get(name) if val: vote.add_metadata(name, val) else: message = _('You already voted on this Article.') if request.is_ajax(): r = {'message': message} if survey: r.update(survey=survey) return HttpResponse(json.dumps(r)) return HttpResponseRedirect(revision.document.get_absolute_url())
def _add_vote_in_past(rev, vote, days_back): v = HelpfulVote(revision=rev, helpful=vote) v.created = v.created - timedelta(days=days_back) v.save()
def helpful_vote(**kwargs): r = kwargs.pop('revision', None) or revision(save=True) defaults = {'created': datetime.now(), 'helpful': False, 'revision': r} defaults.update(kwargs) return HelpfulVote(**defaults)