summaryrefslogtreecommitdiffstats
path: root/forum/views/writers.py
diff options
context:
space:
mode:
Diffstat (limited to 'forum/views/writers.py')
-rwxr-xr-xforum/views/writers.py150
1 files changed, 37 insertions, 113 deletions
diff --git a/forum/views/writers.py b/forum/views/writers.py
index 2b2461de..a9406fdc 100755
--- a/forum/views/writers.py
+++ b/forum/views/writers.py
@@ -13,8 +13,6 @@ from django.utils.translation import ugettext as _
from django.core.urlresolvers import reverse
from django.core.exceptions import PermissionDenied
-from forum.utils.html import sanitize_html
-from markdown2 import Markdown
from forum.forms import *
from forum.models import *
from forum.auth import *
@@ -34,8 +32,6 @@ QUESTIONS_PAGE_SIZE = 10
# used in answers
ANSWERS_PAGE_SIZE = 10
-markdowner = Markdown(html4tags=True)
-
def upload(request):#ajax upload file to a question or answer
class FileTypeNotAllow(Exception):
pass
@@ -94,12 +90,16 @@ def ask(request):#view used to ask a new question
if form.is_valid():
added_at = datetime.datetime.now()
+ #todo: move this to clean_title
title = strip_tags(form.cleaned_data['title'].strip())
wiki = form.cleaned_data['wiki']
+ #todo: move this to clean_tagnames
tagnames = form.cleaned_data['tags'].strip()
text = form.cleaned_data['text']
- html = sanitize_html(markdowner.convert(text))
- summary = strip_tags(html)[:120]
+
+ #todo: move this to AskForm.clean_text
+ #todo: make custom MarkDownField
+ text = form.cleaned_data['text']
if request.user.is_authenticated():
author = request.user
@@ -110,14 +110,14 @@ def ask(request):#view used to ask a new question
added_at = added_at,
wiki = wiki,
tagnames = tagnames,
- summary = summary,
- text = sanitize_html(markdowner.convert(text))
+ text = text,
)
return HttpResponseRedirect(question.get_absolute_url())
else:
request.session.flush()
session_key = request.session.session_key
+ summary = strip_tags(text)[:120]
question = AnonymousQuestion(
session_key = session_key,
title = title,
@@ -162,32 +162,11 @@ def _retag_question(request, question):#non-url subview of edit question - just
form = RetagQuestionForm(question, request.POST)
if form.is_valid():
if form.has_changed():
- latest_revision = question.get_latest_revision()
- retagged_at = datetime.datetime.now()
- # Update the Question itself
- Question.objects.filter(id=question.id).update(
- tagnames = form.cleaned_data['tags'],
- last_edited_at = retagged_at,
- last_edited_by = request.user,
- last_activity_at = retagged_at,
- last_activity_by = request.user
- )
- # Update the Question's tag associations
- tags_updated = Question.objects.update_tags(question,
- form.cleaned_data['tags'], request.user)
- # Create a new revision
- QuestionRevision.objects.create(
- question = question,
- title = latest_revision.title,
- author = request.user,
- revised_at = retagged_at,
- tagnames = form.cleaned_data['tags'],
- summary = CONST['retagged'],
- text = latest_revision.text
+ question.retag(
+ retagged_by = request.user,
+ retagged_at = datetime.datetime.now(),
+ tagnames = form.cleaned_data['tags'],
)
- # send tags updated singal
- tags_updated.send(sender=question.__class__, question=question)
-
return HttpResponseRedirect(question.get_absolute_url())
else:
form = RetagQuestionForm(question)
@@ -201,7 +180,7 @@ def _edit_question(request, question):#non-url subview of edit_question - just e
latest_revision = question.get_latest_revision()
revision_form = None
if request.method == 'POST':
- if 'select_revision' in request.POST:
+ if 'select_revision' in request.POST:#revert-type edit
# user has changed revistion number
revision_form = RevisionForm(question, latest_revision, request.POST)
if revision_form.is_valid():
@@ -211,60 +190,26 @@ def _edit_question(request, question):#non-url subview of edit_question - just e
revision=revision_form.cleaned_data['revision']))
else:
form = EditQuestionForm(question, latest_revision, request.POST)
- else:
+ else:#new content edit
# Always check modifications against the latest revision
form = EditQuestionForm(question, 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()
- tags_changed = (latest_revision.tagnames !=
- form.cleaned_data['tags'])
- tags_updated = False
- # Update the Question itself
- updated_fields = {
- 'title': form.cleaned_data['title'],
- 'last_edited_at': edited_at,
- 'last_edited_by': request.user,
- 'last_activity_at': edited_at,
- 'last_activity_by': request.user,
- 'tagnames': form.cleaned_data['tags'],
- 'summary': strip_tags(html)[:120],
- 'html': html,
- }
-
- # only save when it's checked
- # because wiki doesn't allow to be edited if last version has been enabled already
- # and we make sure this in forms.
- if ('wiki' in form.cleaned_data and
- form.cleaned_data['wiki']):
- updated_fields['wiki'] = True
- updated_fields['wikified_at'] = edited_at
-
- Question.objects.filter(
- id=question.id).update(**updated_fields)
- # Update the Question's tag associations
- if tags_changed:
- tags_updated = Question.objects.update_tags(
- question, form.cleaned_data['tags'], request.user)
- # Create a new revision
- revision = QuestionRevision(
- question = question,
- title = form.cleaned_data['title'],
- author = request.user,
- revised_at = edited_at,
- tagnames = form.cleaned_data['tags'],
- text = form.cleaned_data['text'],
+ edited_by = request.user
+ question.apply_edit(
+ edited_at = edited_at,
+ edited_by = edited_by,
+ title = form.cleaned_data['title'],
+ text = form.cleaned_data['text'],
+ #todo: summary name clash in question and question revision
+ comment = form.cleaned_data['summary'],
+ tags = form.cleaned_data['tags'],
+ wiki = form.cleaned_data.get('wiki',False),
)
- if form.cleaned_data['summary']:
- revision.summary = form.cleaned_data['summary']
- else:
- revision.summary = 'No.%s Revision' % latest_revision.revision
- revision.save()
return HttpResponseRedirect(question.get_absolute_url())
else:
-
revision_form = RevisionForm(question, latest_revision)
form = EditQuestionForm(question, latest_revision)
return render_to_response('question_edit.html', {
@@ -297,33 +242,15 @@ def edit_answer(request, id):
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()
-
+ 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)
@@ -349,18 +276,16 @@ def answer(request, id):#process a new answer
author=request.user,
added_at=update_time,
wiki=wiki,
- text=sanitize_html(markdowner.convert(text)),
+ text=text,
email_notify=form.cleaned_data['email_notify']
)
else:
request.session.flush()
- html = sanitize_html(markdowner.convert(text))
- summary = strip_tags(html)[:120]
anon = AnonymousAnswer(
question=question,
wiki=wiki,
text=text,
- summary=summary,
+ summary=strip_tags(text)[:120],
session_key=request.session.session_key,
ip_addr=request.META['REMOTE_ADDR'],
)
@@ -412,11 +337,10 @@ def __comments(request, obj, type):#non-view generic ajax handler to load commen
response = __generate_comments_json(obj, type, user)
elif request.method == "POST":
if auth.can_add_comments(user,obj):
- comment_data = request.POST.get('comment')
- comment = Comment(content_object=obj, comment=comment_data, user=request.user)
- comment.save()
- obj.comment_count = obj.comment_count + 1
- obj.save()
+ obj.add_comment(
+ comment = request.POST.get('comment'),
+ user = request.user,
+ )
response = __generate_comments_json(obj, type, user)
else:
response = HttpResponseForbidden(mimetype="application/json")