1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
import datetime
from django.db import models
from askbot.models.base import AnonymousContent
from askbot.models import content
from askbot import const
class AnswerManager(models.Manager):
def create_new(
self,
question=None,
author=None,
added_at=None,
wiki=False,
text='',
email_notify=False
):
answer = Answer(
question = question,
author = author,
added_at = added_at,
wiki = wiki,
text = text,
#.html field is denormalized by the save() call
)
if answer.wiki:
answer.last_edited_by = answer.author
answer.last_edited_at = added_at
answer.wikified_at = added_at
answer.parse_and_save(author = author)
answer.add_revision(
author = author,
revised_at = added_at,
text = text,
comment = const.POST_STATUS['default_version'],
)
#update question data
question.last_activity_at = added_at
question.last_activity_by = author
question.answer_count +=1
question.save()
#set notification/delete
if email_notify:
if author not in question.followed_by.all():
question.followed_by.add(author)
else:
#not sure if this is necessary. ajax should take care of this...
try:
question.followed_by.remove(author)
except:
pass
return answer
#todo: I think this method is not being used anymore, I'll just comment it for now
# def get_author_list(self, **kwargs):
# authors = set()
# for answer in self:
# authors.update(answer.get_author_list(**kwargs))
# return list(authors)
#todo: I think this method is not being used anymore, I'll just comment it for now
#def get_answers_from_questions(self, user_id):
# """
# Retrieves visibile answers for the given question. Which are not included own answers
# """
# cursor = connection.cursor()
# cursor.execute(self.GET_ANSWERS_FROM_USER_QUESTIONS, [user_id, user_id])
# return cursor.fetchall()
class Answer(content.Content):
post_type = 'answer'
question = models.ForeignKey('Question', related_name='answers')
#todo: probably remove these denormalized fields?
accepted = models.BooleanField(default=False)
accepted_at = models.DateTimeField(null=True, blank=True)
#todo: we'll need to add "accepted_by" b/c sometimes non-askers can accept
objects = AnswerManager()
class Meta(content.Content.Meta):
db_table = u'answer'
is_anonymous = False #answers are never anonymous - may change
class AnonymousAnswer(AnonymousContent):
question = models.ForeignKey('Question', related_name='anonymous_answers')
def publish(self,user):
added_at = datetime.datetime.now()
Answer.objects.create_new(question=self.question,wiki=self.wiki,
added_at=added_at,text=self.text,
author=user)
self.delete()
|