def question(request, id, slug='', answer=None): try: question = Question.objects.get(id=id) except: if slug: question = match_question_slug(id, slug) if question is not None: return HttpResponseRedirect(question.get_absolute_url()) raise Http404() if question.nis.deleted and not request.user.can_view_deleted_post(question): raise Http404 if request.GET.get('type', None) == 'rss': return RssAnswerFeed(request, question, include_comments=request.GET.get('comments', None) == 'yes')(request) if answer: answer = get_object_or_404(Answer, id=answer) if (question.nis.deleted and not request.user.can_view_deleted_post(question)) or answer.question != question: raise Http404 if answer.marked: return HttpResponsePermanentRedirect(question.get_absolute_url()) return answer_redirect(request, answer) if settings.FORCE_SINGLE_URL and (slug != slugify(question.title)): return HttpResponsePermanentRedirect(question.get_absolute_url()) if request.POST: answer_form = AnswerForm(request.POST, user=request.user) else: answer_form = AnswerForm(user=request.user) answers = request.user.get_visible_answers(question) update_question_view_times(request, question) if request.user.is_authenticated(): try: subscription = QuestionSubscription.objects.get(question=question, user=request.user) except: subscription = False else: subscription = False from forum.models import CustomBadge response_restricted = CustomBadge.is_response_restricted(request.user, question) return pagination.paginated(request, ('answers', AnswerPaginatorContext()), { "question" : question, "answer" : answer_form, "answers" : answers, "similar_questions" : question.get_related_questions(), "subscription": subscription, 'response_restricted': response_restricted, })
def edit_answer(request, id): answer = get_object_or_404(Answer, id=id) if answer.deleted and not request.user.can_view_deleted_post(answer): raise Http404 elif not request.user.can_edit_post(answer): raise Http404 from forum.models import CustomBadge if CustomBadge.is_response_restricted(request.user, answer.parent): raise Http404 if request.method == "POST": revision_form = RevisionForm(answer, data=request.POST) revision_form.is_valid() revision = answer.revisions.get( revision=revision_form.cleaned_data['revision']) if 'select_revision' in request.POST: form = EditAnswerForm(answer, request.user, revision) else: form = EditAnswerForm(answer, request.user, revision, data=request.POST) if not 'select_revision' in request.POST and form.is_valid(): if form.has_changed(): action = ReviseAction(user=request.user, node=answer, ip=request.META['REMOTE_ADDR']).save( data=form.cleaned_data) if settings.WIKI_ON: if request.POST.get('wiki', False) and not answer.nis.wiki: answer.nstate.wiki = action elif answer.nis.wiki and (not request.POST.get( 'wiki', False)) and request.user.can_cancel_wiki(answer): answer.nstate.wiki = None else: if not revision == answer.active_revision: RollbackAction(user=request.user, node=answer, ip=request.META['REMOTE_ADDR']).save( data=dict(activate=revision)) return HttpResponseRedirect(answer.get_absolute_url()) else: revision_form = RevisionForm(answer) form = EditAnswerForm(answer, request.user) return render_to_response('answer_edit.html', { 'answer': answer, 'revision_form': revision_form, 'form': form, }, context_instance=RequestContext(request))
def answer(request, id): question = get_object_or_404(Question, id=id) from forum.models import CustomBadge if not CustomBadge.is_response_restricted(request.user, question) and request.POST: form = AnswerForm(request.POST, request.user) if request.session.pop('reviewing_pending_data', False) or not form.is_valid(): request.session['redirect_POST_data'] = request.POST return HttpResponseRedirect(question.get_absolute_url() + '#fmanswer') if request.user.is_authenticated( ) and request.user.email_valid_and_can_answer(): answer_action = AnswerAction(user=request.user, ip=request.META['REMOTE_ADDR']).save( dict(question=question, **form.cleaned_data)) answer = answer_action.node if settings.WIKI_ON and request.POST.get('wiki', False): answer.nstate.wiki = answer_action return HttpResponseRedirect(answer.get_absolute_url()) else: request.session['pending_submission_data'] = { 'POST': request.POST, 'data_name': _("answer"), 'type': 'answer', 'submission_url': reverse('answer', kwargs={'id': id}), 'time': datetime.datetime.now() } if request.user.is_authenticated(): request.user.message_set.create( message=_("Your answer is pending until you %s.") % html.hyperlink(reverse('send_validation_email'), _("validate your email"))) return HttpResponseRedirect(question.get_absolute_url()) else: return HttpResponseRedirect(reverse('auth_signin')) return HttpResponseRedirect(question.get_absolute_url())
def edit_answer(request, id): answer = get_object_or_404(Answer, id=id) if answer.deleted and not request.user.can_view_deleted_post(answer): raise Http404 elif not request.user.can_edit_post(answer): raise Http404 from forum.models import CustomBadge if CustomBadge.is_response_restricted(request.user, answer.parent): raise Http404 if request.method == "POST": revision_form = RevisionForm(answer, data=request.POST) revision_form.is_valid() revision = answer.revisions.get(revision=revision_form.cleaned_data['revision']) if 'select_revision' in request.POST: form = EditAnswerForm(answer, request.user, revision) else: form = EditAnswerForm(answer, request.user, revision, data=request.POST) if not 'select_revision' in request.POST and form.is_valid(): if form.has_changed(): action = ReviseAction(user=request.user, node=answer, ip=request.META['REMOTE_ADDR']).save(data=form.cleaned_data) if settings.WIKI_ON: if request.POST.get('wiki', False) and not answer.nis.wiki: answer.nstate.wiki = action elif answer.nis.wiki and (not request.POST.get('wiki', False)) and request.user.can_cancel_wiki(answer): answer.nstate.wiki = None else: if not revision == answer.active_revision: RollbackAction(user=request.user, node=answer, ip=request.META['REMOTE_ADDR']).save(data=dict(activate=revision)) return HttpResponseRedirect(answer.get_absolute_url()) else: revision_form = RevisionForm(answer) form = EditAnswerForm(answer, request.user) return render_to_response('answer_edit.html', { 'answer': answer, 'revision_form': revision_form, 'form': form, }, context_instance=RequestContext(request))
def answer(request, id): question = get_object_or_404(Question, id=id) from forum.models import CustomBadge if not CustomBadge.is_response_restricted(request.user, question) and request.POST: form = AnswerForm(request.POST, request.user) if request.session.pop('reviewing_pending_data', False) or not form.is_valid(): request.session['redirect_POST_data'] = request.POST return HttpResponseRedirect(question.get_absolute_url() + '#fmanswer') if request.user.is_authenticated() and request.user.email_valid_and_can_answer(): answer_action = AnswerAction(user=request.user, ip=request.META['REMOTE_ADDR']).save(dict(question=question, **form.cleaned_data)) answer = answer_action.node if settings.WIKI_ON and request.POST.get('wiki', False): answer.nstate.wiki = answer_action return HttpResponseRedirect(answer.get_absolute_url()) else: request.session['pending_submission_data'] = { 'POST': request.POST, 'data_name': _("answer"), 'type': 'answer', 'submission_url': reverse('answer', kwargs={'id': id}), 'time': datetime.datetime.now() } if request.user.is_authenticated(): request.user.message_set.create(message=_("Your answer is pending until you %s.") % html.hyperlink( reverse('send_validation_email'), _("validate your email") )) return HttpResponseRedirect(question.get_absolute_url()) else: return HttpResponseRedirect(reverse('auth_signin')) return HttpResponseRedirect(question.get_absolute_url())
def question(request, id, slug='', answer=None): try: question = Question.objects.get(id=id) except: if slug: question = match_question_slug(id, slug) if question is not None: return HttpResponseRedirect(question.get_absolute_url()) raise Http404() if question.nis.deleted and not request.user.can_view_deleted_post( question): raise Http404 if request.GET.get('type', None) == 'rss': return RssAnswerFeed(request, question, include_comments=request.GET.get( 'comments', None) == 'yes')(request) if answer: answer = get_object_or_404(Answer, id=answer) if (question.nis.deleted and not request.user.can_view_deleted_post(question) ) or answer.question != question: raise Http404 if answer.marked: return HttpResponsePermanentRedirect(question.get_absolute_url()) return answer_redirect(request, answer) if settings.FORCE_SINGLE_URL and (slug != slugify(question.title)): return HttpResponsePermanentRedirect(question.get_absolute_url()) if request.POST: answer_form = AnswerForm(request.POST, user=request.user) else: answer_form = AnswerForm(user=request.user) answers = request.user.get_visible_answers(question) update_question_view_times(request, question) if request.user.is_authenticated(): try: subscription = QuestionSubscription.objects.get(question=question, user=request.user) except: subscription = False else: subscription = False from forum.models import CustomBadge response_restricted = CustomBadge.is_response_restricted( request.user, question) return pagination.paginated( request, ('answers', AnswerPaginatorContext()), { "question": question, "answer": answer_form, "answers": answers, "similar_questions": question.get_related_questions(), "subscription": subscription, 'response_restricted': response_restricted, })