thread.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. from django.db import models
  2. from misago.conf import settings
  3. from misago.core.utils import slugify
  4. __all__ = ['ANNOUNCEMENT', 'PINNED', 'Thread']
  5. ANNOUNCEMENT = 2
  6. PINNED = 1
  7. class Thread(models.Model):
  8. forum = models.ForeignKey('misago_forums.Forum')
  9. weight = models.PositiveIntegerField(default=0)
  10. prefix = models.ForeignKey('misago_threads.Prefix',
  11. null=True, blank=True,
  12. on_delete=models.SET_NULL)
  13. title = models.CharField(max_length=255)
  14. slug = models.SlugField(max_length=255)
  15. replies = models.PositiveIntegerField(default=0)
  16. has_reported_posts = models.BooleanField(default=False)
  17. has_moderated_posts = models.BooleanField(default=False)
  18. has_hidden_posts = models.BooleanField(default=False)
  19. started_on = models.DateTimeField()
  20. first_post = models.ForeignKey('misago_threads.Post', related_name='+',
  21. null=True, blank=True,
  22. on_delete=models.SET_NULL)
  23. starter = models.ForeignKey(settings.AUTH_USER_MODEL,
  24. null=True, blank=True,
  25. on_delete=models.SET_NULL)
  26. starter_name = models.CharField(max_length=255)
  27. starter_slug = models.SlugField(max_length=255)
  28. last_post_on = models.DateTimeField()
  29. last_post = models.ForeignKey('misago_threads.Post', related_name='+',
  30. null=True, blank=True,
  31. on_delete=models.SET_NULL)
  32. last_poster = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+',
  33. null=True, blank=True,
  34. on_delete=models.SET_NULL)
  35. last_poster_name = models.CharField(max_length=255, null=True, blank=True)
  36. last_poster_slug = models.SlugField(max_length=255, null=True, blank=True)
  37. is_poll = models.BooleanField(default=False)
  38. is_moderated = models.BooleanField(default=False)
  39. is_hidden = models.BooleanField(default=False)
  40. is_closed = models.BooleanField(default=False)
  41. def is_announcement(self):
  42. return self.weight == ANNOUNCEMENT
  43. def is_pinned(self):
  44. return self.weight == PINNED
  45. def get_absolute_url(self):
  46. pass
  47. def get_new_reply_url(self):
  48. pass
  49. def get_last_reply_url(self):
  50. pass
  51. def set_title(self, title):
  52. self.title = title
  53. self.slug = slugify(title)
  54. def set_first_post(self, post):
  55. self.started_on = post.posted_on
  56. self.first_post = post
  57. self.starter = post.poster
  58. self.starter_name = post.poster_name
  59. if post.poster:
  60. self.starter_slug = post.poster.slug
  61. else:
  62. self.starter_slug = slugify(post.poster_name)
  63. def set_last_post(self, post):
  64. self.last_post_on = post.posted_on
  65. self.last_post = post
  66. self.last_poster = post.poster
  67. self.last_poster_name = post.poster_name
  68. if post.poster:
  69. self.last_poster_slug = post.poster.slug
  70. else:
  71. self.last_poster_slug = slugify(post.poster_name)