X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/1a949f7c97dc2f34c135f5cdf088df2927d3d652..32c46c35fc9dbf3305dc774b144ff5af5176c9de:/forum/models/answer.py diff --git a/forum/models/answer.py b/forum/models/answer.py index 85d671a..01e0aae 100644 --- a/forum/models/answer.py +++ b/forum/models/answer.py @@ -2,67 +2,38 @@ from base import * from question import Question -class AnswerManager(CachedManager): - 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, - html = text - ) - if answer.wiki: - answer.last_edited_by = answer.author - answer.last_edited_at = added_at - answer.wikified_at = added_at - - answer.save() - - #update question data - question.last_activity_at = added_at - question.last_activity_by = author - question.save() - - AnswerRevision.objects.create( - answer = answer, - revision = 1, - author = author, - revised_at = added_at, - summary = CONST['default_version'], - text = text - ) - - -class Answer(Content): - question = models.ForeignKey('Question', related_name='answers') +class Answer(QandA): accepted = models.BooleanField(default=False) accepted_at = models.DateTimeField(null=True, blank=True) accepted_by = models.ForeignKey(User, null=True) - - objects = AnswerManager() - - class Meta(Content.Meta): + class Meta(QandA.Meta): db_table = u'answer' + @property + def headline(self): + return self.question.headline + def mark_accepted(self, user): if not self.accepted and not self.question.answer_accepted: self.accepted = True self.accepted_at = datetime.datetime.now() self.accepted_by = user self.save() - self.question.answer_accepted = True + self.question.accepted_answer = self self.question.save() + answer_accepted.send(sender=Answer, answer=self, user=user) return True return False - def unmark_accepted(self): + def unmark_accepted(self, user): if self.accepted: self.accepted = False self.save() - self.question.answer_accepted = False + self.question.accepted_answer = None self.question.save() + answer_accepted_canceled.send(sender=Answer, answer=self, user=user) return True return False @@ -71,6 +42,10 @@ class Answer(Content): self.question.answer_count = self.question.answer_count + diff self.question.save() + def activate_revision(self, user, revision): + super(Answer, self).activate_revision(user, revision) + self.question.update_last_activity(user) + def mark_deleted(self, user): if super(Answer, self).mark_deleted(user): self._update_question_answer_count(-1) @@ -97,36 +72,9 @@ class Answer(Content): def __unicode__(self): return self.html +answer_accepted = django.dispatch.Signal(providing_args=['answer', 'user']) +answer_accepted_canceled = django.dispatch.Signal(providing_args=['answer', 'user']) -class AnswerRevision(ContentRevision): - """A revision of an Answer.""" - answer = models.ForeignKey('Answer', related_name='revisions') - - def get_absolute_url(self): - return reverse('answer_revisions', kwargs={'id':self.answer.id}) - - def get_question_title(self): - return self.answer.question.title - - class Meta(ContentRevision.Meta): - db_table = u'answer_revision' - ordering = ('-revision',) - - def save(self, *args, **kwargs): - """Looks up the next available revision number if not set.""" - if not self.revision: - self.revision = AnswerRevision.objects.filter( - answer=self.answer).values_list('revision', - flat=True)[0] + 1 - super(AnswerRevision, self).save(*args, **kwargs) - -class AnonymousAnswer(AnonymousContent): - question = models.ForeignKey('Question', related_name='anonymous_answers') - - def publish(self,user): - added_at = datetime.datetime.now() - #print user.id - Answer.objects.create_new(question=self.question,wiki=self.wiki, - added_at=added_at,text=self.text, - author=user) - self.delete() +class AnswerRevision(NodeRevision): + class Meta: + proxy = True \ No newline at end of file