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""" document = get_object_or_404(Document, locale=request.locale, slug=document_slug) if not document.has_voted(request): ua = request.META.get('HTTP_USER_AGENT', '')[:1000] # 1000 max_length vote = HelpfulVote(document=document, 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. Try searching for solutions ' 'below.') if request.user.is_authenticated(): vote.creator = request.user else: vote.anonymous_id = request.anonymous.anonymous_id vote.save() else: message = _('You already voted on this Article.') if request.is_ajax(): return HttpResponse(json.dumps({'message': message})) return HttpResponseRedirect(document.get_absolute_url())
def helpful_vote(request, document_slug): """Vote for Helpful/Not Helpful document""" document = get_object_or_404( Document, locale=request.locale, slug=document_slug) if not document.has_voted(request): ua = request.META.get('HTTP_USER_AGENT', '')[:1000] # 1000 max_length vote = HelpfulVote(document=document, 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. Try searching for solutions ' 'below.') if request.user.is_authenticated(): vote.creator = request.user else: vote.anonymous_id = request.anonymous.anonymous_id vote.save() else: message = _('You already voted on this Article.') if request.is_ajax(): return HttpResponse(json.dumps({'message': message})) return HttpResponseRedirect(document.get_absolute_url())
def test_unhelpful_survey(self): """The unhelpful survey is stored as vote metadata""" vote = HelpfulVote(revision=revision(save=True)) vote.save() response = self.client.post(reverse('wiki.unhelpful_survey'), {'vote_id': vote.id, 'button': 'Submit', 'confusing': 1, 'too-long': 1, 'comment': 'lorem ipsum dolor'}) eq_(200, response.status_code) eq_('{"message": "Thanks for making us better!"}', response.content) vote_meta = vote.metadata.all()[0] eq_('survey', vote_meta.key) survey = json.loads(vote_meta.value) eq_(3, len(survey.keys())) assert 'confusing' in survey assert 'too-long' in survey eq_('lorem ipsum dolor', survey['comment'])
def test_unhelpful_survey(self): """The unhelpful survey is stored as vote metadata""" vote = HelpfulVote(revision=revision(save=True)) vote.save() response = self.client.post( reverse('wiki.unhelpful_survey'), { 'vote_id': vote.id, 'button': 'Submit', 'confusing': 1, 'too-long': 1, 'comment': 'lorem ipsum dolor' }) eq_(200, response.status_code) eq_('{"message": "Thanks for making us better!"}', response.content) vote_meta = vote.metadata.all()[0] eq_('survey', vote_meta.key) survey = json.loads(vote_meta.value) eq_(3, len(survey.keys())) assert 'confusing' in survey assert 'too-long' in survey eq_('lorem ipsum dolor', survey['comment'])
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'])) 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. Try searching for solutions ' 'below.') if request.user.is_authenticated(): vote.creator = request.user else: vote.anonymous_id = request.anonymous.anonymous_id vote.save() statsd.incr('wiki.vote') # Save vote metadata: referrer and search query (if available) for name in ['referrer', 'query']: val = request.POST.get(name) if val: vote.add_metadata(name, val) else: message = _('You already voted on this Article.') if request.is_ajax(): return HttpResponse(json.dumps({'message': message})) 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)