X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/64aa22655852e67a09057429a95942ee3c400fb7..af8a49892d4eea73d625a936cf84ca78f10d99e3:/forum/actions/node.py diff --git a/forum/actions/node.py b/forum/actions/node.py index fd1e1f5..263839a 100644 --- a/forum/actions/node.py +++ b/forum/actions/node.py @@ -2,6 +2,7 @@ from django.utils.html import strip_tags from django.utils.translation import ugettext as _ from forum.models.action import ActionProxy from forum.models import Comment, Question, Answer, NodeRevision +import logging class NodeEditAction(ActionProxy): def create_revision_data(self, initial=False, **data): @@ -19,7 +20,11 @@ class AskAction(NodeEditAction): verb = _("asked") def process_data(self, **data): - question = Question(author=self.user, **self.create_revision_data(True, **data)) + processed_data = self.create_revision_data(True, **data) + if 'added_at' in data: + processed_data['added_at'] = data['added_at'] + + question = Question(author=self.user, **processed_data) question.save() self.node = question @@ -42,7 +47,7 @@ class AnswerAction(NodeEditAction): def describe(self, viewer=None): question = self.node.parent - return _("%(user)s answered %(asker)s %(question)s") % { + return _("%(user)s answered %(asker)s on %(question)s") % { 'user': self.hyperlink(self.user.get_profile_url(), self.friendly_username(viewer, self.user)), 'asker': self.hyperlink(question.author.get_profile_url(), self.friendly_username(viewer, question.author)), 'question': self.hyperlink(self.node.get_absolute_url(), question.title) @@ -175,6 +180,53 @@ class AnswerToCommentAction(ActionProxy): 'question': self.describe_node(viewer, self.node.abs_parent), } +class CommentToAnswerAction(ActionProxy): + verb = _("converted") + + def process_data(self, question): + self.node.parent = question + self.node.node_type = "answer" + self.node.last_edited = self + self.node.update_last_activity(self.user, save=True) + + + def describe(self, viewer=None): + return _("%(user)s converted comment on %(question)s into an answer") % { + 'user': self.hyperlink(self.user.get_profile_url(), self.friendly_username(viewer, self.user)), + 'question': self.describe_node(viewer, self.node.abs_parent), + } + +class AnswerToQuestionAction(NodeEditAction): + verb = _("converted to question") + + def process_data(self, **data): + revision_data = self.create_revision_data(**data) + revision = self.node.create_revision(self.user, **revision_data) + + original_question = self.node.question + + self.extra = { + 'covert_revision': revision.revision, + 'original_question': original_question + } + + self.node.node_type = "question" + self.node.parent = None + self.node.abs_parent = None + + original_question.reset_answer_count_cache() + + def process_action(self): + self.node.last_edited = self + self.node.save() + + + def describe(self, viewer=None): + return _("%(user)s converted an answer to %(question)s into a separate question") % { + 'user': self.hyperlink(self.user.get_profile_url(), self.friendly_username(viewer, self.user)), + 'question': self.describe_node(viewer, self.node.abs_parent), + } + class WikifyAction(ActionProxy): verb = _("wikified") @@ -188,7 +240,7 @@ class WikifyAction(ActionProxy): self.node.update_last_activity(self.user, save=True) def describe(self, viewer=None): - return _("%(user)s marked %(node)s as community wiky.") % { + return _("%(user)s marked %(node)s as community wiki.") % { 'user': self.hyperlink(self.user.get_profile_url(), self.friendly_username(viewer, self.user)), 'node': self.describe_node(viewer, self.node), }