]> git.openstreetmap.org Git - osqa.git/blob - forum/models/answer.py
fix in flag and delete commands, and added the possibility for admins and post author...
[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.answer_accepted = True
24             self.question.save()
25             return True
26
27         return False
28
29     def unmark_accepted(self):
30         if self.accepted:
31             self.accepted = False
32             self.save()
33             self.question.answer_accepted = False
34             self.question.save()
35             return True
36
37         return False
38
39     def _update_question_answer_count(self, diff):
40         self.question.answer_count = self.question.answer_count + diff
41         self.question.save()
42
43     def activate_revision(self, user, revision):
44         super(Answer, self).activate_revision(user, revision)
45         self.question.update_last_activity(user)
46
47     def mark_deleted(self, user):
48         if super(Answer, self).mark_deleted(user):
49             self._update_question_answer_count(-1)
50
51     def unmark_deleted(self):
52         if super(Answer, self).unmark_deleted():
53             self._update_question_answer_count(1)
54
55     def get_latest_revision(self):
56         return self.revisions.all()[0]
57
58     def get_question_title(self):
59         return self.question.title
60
61     def get_absolute_url(self):
62         return '%s#%s' % (self.question.get_absolute_url(), self.id)
63
64     def save(self, *args, **kwargs):
65         super(Answer, self).save(*args, **kwargs)
66
67         if self._is_new:
68             self._update_question_answer_count(1)
69
70     def __unicode__(self):
71         return self.html
72         
73
74 class AnswerRevision(NodeRevision):
75     class Meta:
76         proxy = True