def edit_answer(request, id): answer = get_object_or_404(Answer, id=id) if answer.deleted and not auth.can_view_deleted_post(request.user, answer): raise Http404 elif not auth.can_edit_post(request.user, answer): raise Http404 else: latest_revision = answer.get_latest_revision() if request.method == "POST": if 'select_revision' in request.POST: # user has changed revistion number revision_form = RevisionForm(answer, latest_revision, request.POST) if revision_form.is_valid(): # Replace with those from the selected revision form = EditAnswerForm(answer, AnswerRevision.objects.get(answer=answer, revision=revision_form.cleaned_data['revision'])) else: form = EditAnswerForm(answer, latest_revision, request.POST) else: form = EditAnswerForm(answer, latest_revision, request.POST) if form.is_valid(): html = sanitize_html(markdowner.convert(form.cleaned_data['text'])) if form.has_changed(): edited_at = datetime.datetime.now() updated_fields = { 'last_edited_at': edited_at, 'last_edited_by': request.user, 'html': html, } Answer.objects.filter(id=answer.id).update(**updated_fields) revision = AnswerRevision( answer=answer, author=request.user, revised_at=edited_at, text=form.cleaned_data['text'] ) if form.cleaned_data['summary']: revision.summary = form.cleaned_data['summary'] else: revision.summary = 'No.%s Revision' % latest_revision.revision revision.save() answer.question.last_activity_at = edited_at answer.question.last_activity_by = request.user answer.question.save() return HttpResponseRedirect(answer.get_absolute_url()) else: revision_form = RevisionForm(answer, latest_revision) form = EditAnswerForm(answer, latest_revision) return render_to_response('answer_edit.html', { 'answer': answer, 'revision_form': revision_form, 'form': form, }, context_instance=RequestContext(request))
def edit_question(request, id):#edit or retag a question """view to edit question """ question = get_object_or_404(Question, id=id) if question.deleted and not auth.can_view_deleted_post(request.user, question): raise Http404 if auth.can_edit_post(request.user, question): return _edit_question(request, question) elif auth.can_retag_questions(request.user): return _retag_question(request, question) else: raise Http404
def edit_answer(request, id): answer = get_object_or_404(Answer, id=id) if answer.deleted and not auth.can_view_deleted_post(request.user, answer): raise Http404 elif not auth.can_edit_post(request.user, answer): raise Http404 else: latest_revision = answer.get_latest_revision() if request.method == "POST": if 'select_revision' in request.POST: # user has changed revistion number revision_form = RevisionForm(answer, latest_revision, request.POST) if revision_form.is_valid(): # Replace with those from the selected revision form = EditAnswerForm(answer, AnswerRevision.objects.get(answer=answer, revision=revision_form.cleaned_data['revision'])) else: form = EditAnswerForm(answer, latest_revision, request.POST) else: form = EditAnswerForm(answer, latest_revision, request.POST) if form.is_valid(): if form.has_changed(): edited_at = datetime.datetime.now() answer.apply_edit( edited_at = edited_at, edited_by = request.user, text = form.cleaned_data['text'], comment = form.cleaned_data['summary'], wiki = False,#todo: fix this there is no "wiki" field on "edit answer" ) return HttpResponseRedirect(answer.get_absolute_url()) else: revision_form = RevisionForm(answer, latest_revision) form = EditAnswerForm(answer, latest_revision) return render_to_response('answer_edit.html', { 'answer': answer, 'revision_form': revision_form, 'form': form, }, context_instance=RequestContext(request))
def question(request, id):#refactor - long subroutine. display question body, answers and comments """view that displays body of the question and all answers to it """ try: page = int(request.GET.get('page', '1')) except ValueError: page = 1 view_id = request.GET.get('sort', None) view_dic = {"latest":"-added_at", "oldest":"added_at", "votes":"-score" } try: orderby = view_dic[view_id] except KeyError: qsm = request.session.get('questions_sort_method',None) if qsm in ('mostvoted','latest'): logging.debug('loaded from session ' + qsm) if qsm == 'mostvoted': view_id = 'votes' orderby = '-score' else: view_id = 'latest' orderby = '-added_at' else: view_id = "votes" orderby = "-score" logging.debug('view_id=' + str(view_id)) question = get_object_or_404(Question, id=id) try: pattern = r'/%s%s%d/([\w-]+)' % (settings.FORUM_SCRIPT_ALIAS,_('question/'), question.id) path_re = re.compile(pattern) logging.debug(pattern) logging.debug(request.path) m = path_re.match(request.path) if m: slug = m.group(1) logging.debug('have slug %s' % slug) assert(slug == slugify(question.title)) else: logging.debug('no match!') except: return HttpResponseRedirect(question.get_absolute_url()) if question.deleted and not auth.can_view_deleted_post(request.user, question): raise Http404 answer_form = AnswerForm(question,request.user) answers = Answer.objects.get_answers_from_question(question, request.user) answers = answers.select_related(depth=1) favorited = question.has_favorite_by_user(request.user) if request.user.is_authenticated(): question_vote = question.votes.select_related().filter(user=request.user) else: question_vote = None #is this correct? if question_vote is not None and question_vote.count() > 0: question_vote = question_vote[0] user_answer_votes = {} for answer in answers: vote = answer.get_user_vote(request.user) if vote is not None and not user_answer_votes.has_key(answer.id): vote_value = -1 if vote.is_upvote(): vote_value = 1 user_answer_votes[answer.id] = vote_value if answers is not None: answers = answers.order_by("-accepted", orderby) filtered_answers = [] for answer in answers: if answer.deleted == True: if answer.author_id == request.user.id: filtered_answers.append(answer) else: filtered_answers.append(answer) objects_list = Paginator(filtered_answers, ANSWERS_PAGE_SIZE) page_objects = objects_list.page(page) #todo: merge view counts per user and per session #1) view count per session update_view_count = False if 'question_view_times' not in request.session: request.session['question_view_times'] = {} last_seen = request.session['question_view_times'].get(question.id,None) updated_when, updated_who = question.get_last_update_info() if updated_who != request.user: if last_seen: if last_seen < updated_when: update_view_count = True else: update_view_count = True request.session['question_view_times'][question.id] = datetime.datetime.now() if update_view_count: question.increment_view_count() question.save() #2) question view count per user if request.user.is_authenticated(): try: question_view = QuestionView.objects.get(who=request.user, question=question) except QuestionView.DoesNotExist: question_view = QuestionView(who=request.user, question=question) question_view.when = datetime.datetime.now() question_view.save() return render_to_response('question.html', { "question" : question, "question_vote" : question_vote, "question_comment_count":question.comments.count(), "answer" : answer_form, "answers" : page_objects.object_list, "user_answer_votes": user_answer_votes, "tags" : question.tags.all(), "tab_id" : view_id, "favorited" : favorited, "similar_questions" : Question.objects.get_similar_questions(question), "context" : { 'is_paginated' : True, 'pages': objects_list.num_pages, 'page': page, 'has_previous': page_objects.has_previous(), 'has_next': page_objects.has_next(), 'previous': page_objects.previous_page_number(), 'next': page_objects.next_page_number(), 'base_url' : request.path + '?sort=%s&' % view_id, 'extend_url' : "#sort-top" } }, context_instance=RequestContext(request))
try: pattern = r'/%s%s%d/([\w-]+)' % (django_settings.FORUM_SCRIPT_ALIAS,_('question/'), question.id) path_re = re.compile(pattern) logging.debug(pattern) logging.debug(request.path) m = path_re.match(request.path) if m: slug = m.group(1) logging.debug('have slug %s' % slug) assert(slug == slugify(question.title)) else: logging.debug('no match!') except Exception, e: return HttpResponseRedirect(question.get_absolute_url()) if question.deleted and not auth.can_view_deleted_post(request.user, question): raise Http404 answer_form = AnswerForm(question,request.user) answers = Answer.objects.get_answers_from_question(question, request.user) answers = answers.select_related(depth=1) favorited = question.has_favorite_by_user(request.user) if request.user.is_authenticated(): question_vote = question.votes.select_related().filter(user=request.user) else: question_vote = None #is this correct? if question_vote is not None and question_vote.count() > 0: question_vote = question_vote[0] user_answer_votes = {} for answer in answers: