models.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. from django.db import models
  2. from django.utils import timezone
  3. from django.utils.translation import ugettext_lazy as _
  4. class ThreadManager(models.Manager):
  5. def filter_stats(self, start, end):
  6. return self.filter(start__gte=start).filter(start__lte=end)
  7. class Thread(models.Model):
  8. forum = models.ForeignKey('forums.Forum')
  9. weight = models.PositiveIntegerField(default=0,db_index=True)
  10. type = models.PositiveIntegerField(default=0)
  11. name = models.CharField(max_length=255)
  12. slug = models.SlugField(max_length=255)
  13. replies = models.PositiveIntegerField(default=0)
  14. replies_reported = models.PositiveIntegerField(default=0)
  15. replies_moderated = models.PositiveIntegerField(default=0)
  16. replies_deleted = models.PositiveIntegerField(default=0)
  17. score = models.PositiveIntegerField(default=30,db_index=True)
  18. upvotes = models.PositiveIntegerField(default=0)
  19. downvotes = models.PositiveIntegerField(default=0)
  20. start = models.DateTimeField(db_index=True)
  21. start_post = models.ForeignKey('Post',related_name='+',null=True,blank=True,on_delete=models.SET_NULL)
  22. start_poster = models.ForeignKey('users.User',null=True,blank=True)
  23. start_poster_name = models.CharField(max_length=255)
  24. start_poster_slug = models.SlugField(max_length=255)
  25. start_poster_style = models.CharField(max_length=255)
  26. last = models.DateTimeField(db_index=True)
  27. last_post = models.ForeignKey('Post',related_name='+',null=True,blank=True,on_delete=models.SET_NULL)
  28. last_poster = models.ForeignKey('users.User',related_name='+',null=True,blank=True)
  29. last_poster_name = models.CharField(max_length=255,null=True,blank=True)
  30. last_poster_slug = models.SlugField(max_length=255,null=True,blank=True)
  31. last_poster_style = models.CharField(max_length=255,null=True,blank=True)
  32. moderated = models.BooleanField(default=False,db_index=True)
  33. deleted = models.BooleanField(default=False,db_index=True)
  34. closed = models.BooleanField(default=False)
  35. objects = ThreadManager()
  36. statistics_name = _('New Threads')
  37. def get_date(self):
  38. return self.start
  39. class PostManager(models.Manager):
  40. def filter_stats(self, start, end):
  41. return self.filter(date__gte=start).filter(date__lte=end)
  42. class Post(models.Model):
  43. forum = models.ForeignKey('forums.Forum')
  44. thread = models.ForeignKey(Thread)
  45. user = models.ForeignKey('users.User',null=True,blank=True)
  46. user_name = models.CharField(max_length=255)
  47. ip = models.GenericIPAddressField()
  48. agent = models.CharField(max_length=255)
  49. post = models.TextField()
  50. post_preparsed = models.TextField()
  51. upvotes = models.PositiveIntegerField(default=0)
  52. downvotes = models.PositiveIntegerField(default=0)
  53. date = models.DateTimeField()
  54. edited = models.BooleanField(default=False)
  55. edits = models.PositiveIntegerField(default=0)
  56. edit_date = models.DateTimeField(null=True,blank=True)
  57. edit_reason = models.CharField(max_length=255,null=True,blank=True)
  58. edit_user = models.ForeignKey('users.User',related_name='+',null=True)
  59. edit_user_name = models.CharField(max_length=255,null=True,blank=True)
  60. edit_user_slug = models.SlugField(max_length=255,null=True,blank=True)
  61. reported = models.BooleanField(default=False)
  62. moderated = models.BooleanField(default=False,db_index=True)
  63. deleted = models.BooleanField(default=False,db_index=True)
  64. protected = models.BooleanField(default=False)
  65. objects = PostManager()
  66. statistics_name = _('New Posts')
  67. def get_date(self):
  68. return self.date
  69. def set_checkpoint(self, request, action):
  70. if request.user.is_authenticated():
  71. self.checkpoint_set.create(
  72. forum=self.forum,
  73. thread=self.thread,
  74. post=self,
  75. action=action,
  76. user=request.user,
  77. user_name=request.user.username,
  78. user_slug=request.user.username_slug,
  79. date=timezone.now(),
  80. ip=request.session.get_ip(request),
  81. agent=request.META.get('HTTP_USER_AGENT'),
  82. )
  83. class Change(models.Model):
  84. forum = models.ForeignKey('forums.Forum')
  85. thread = models.ForeignKey(Thread)
  86. post = models.ForeignKey(Post)
  87. user = models.ForeignKey('users.User',null=True,blank=True)
  88. user_name = models.CharField(max_length=255)
  89. user_slug = models.CharField(max_length=255)
  90. date = models.DateTimeField()
  91. ip = models.GenericIPAddressField()
  92. agent = models.CharField(max_length=255)
  93. change = models.IntegerField(default=0)
  94. thread_name = models.CharField(max_length=255)
  95. post_content = models.TextField()
  96. class Checkpoint(models.Model):
  97. forum = models.ForeignKey('forums.Forum')
  98. thread = models.ForeignKey(Thread)
  99. post = models.ForeignKey(Post)
  100. action = models.CharField(max_length=255)
  101. user = models.ForeignKey('users.User',null=True,blank=True)
  102. user_name = models.CharField(max_length=255)
  103. user_slug = models.CharField(max_length=255)
  104. date = models.DateTimeField()
  105. ip = models.GenericIPAddressField()
  106. agent = models.CharField(max_length=255)