]> git.openstreetmap.org Git - osqa.git/blob - forum/models/answer.py
OSQA - 19
[osqa.git] / forum / models / answer.py
1 from base import *
2
3 from question import Question
4
5 class Answer(QandA):
6     accepted    = models.BooleanField(default=False)
7     accepted_at = models.DateTimeField(null=True, blank=True)
8     accepted_by = models.ForeignKey(User, null=True)
9
10     class Meta(QandA.Meta):
11         db_table = u'answer'
12
13     @property
14     def headline(self):
15         return self.question.headline
16
17     def mark_accepted(self, user):
18         if not self.accepted and not self.question.answer_accepted:
19             self.accepted = True
20             self.accepted_at = datetime.datetime.now()
21             self.accepted_by = user
22             self.save()
23             self.question.accepted_answer = self
24             self.question.save()
25             answer_accepted.send(sender=Answer, answer=self, user=user)
26             return True
27
28         return False
29
30     def unmark_accepted(self, user):
31         if self.accepted:
32             self.accepted = False
33             self.save()
34             self.question.accepted_answer = None
35             self.question.save()
36             answer_accepted_canceled.send(sender=Answer, answer=self, user=user)
37             return True
38
39         return False
40
41     def _update_question_answer_count(self, diff):
42         self.question.answer_count = self.question.answer_count + diff
43         self.question.save()
44
45     def activate_revision(self, user, revision):
46         super(Answer, self).activate_revision(user, revision)
47         self.question.update_last_activity(user)
48
49     def mark_deleted(self, user):
50         if super(Answer, self).mark_deleted(user):
51             self._update_question_answer_count(-1)
52
53     def unmark_deleted(self):
54         if super(Answer, self).unmark_deleted():
55             self._update_question_answer_count(1)
56
57     def get_latest_revision(self):
58         return self.revisions.all()[0]
59
60     def get_question_title(self):
61         return self.question.title
62
63     def get_absolute_url(self):
64         return '%s#%s' % (self.question.get_absolute_url(), self.id)
65
66     def save(self, *args, **kwargs):
67         super(Answer, self).save(*args, **kwargs)
68
69         if self._is_new:
70             self._update_question_answer_count(1)
71
72     def __unicode__(self):
73         return self.html
74         
75 answer_accepted = django.dispatch.Signal(providing_args=['answer', 'user'])
76 answer_accepted_canceled = django.dispatch.Signal(providing_args=['answer', 'user'])
77
78 class AnswerRevision(NodeRevision):
79     class Meta:
80         proxy = True