models.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. from django.db import models
  2. from django.utils import timezone
  3. from django.utils.translation import ugettext_lazy as _
  4. from misago.conf import settings
  5. from misago.core.cache import cache
  6. CACHE_KEY = 'agreements'
  7. class AgreementManager(models.Manager):
  8. def invalidate_cache(self):
  9. cache.delete(CACHE_KEY)
  10. def get_agreements(self):
  11. agreements = self.get_agreements_from_cache()
  12. if agreements == 'nada':
  13. agreements = self.get_agreements_from_db()
  14. cache.set(CACHE_KEY, agreements)
  15. return agreements
  16. def get_agreements_from_cache(self):
  17. return cache.get(CACHE_KEY, 'nada')
  18. def get_agreements_from_db(self):
  19. agreements = {}
  20. for agreement in Agreement.objects.filter('is_active'):
  21. agreements[agreement.type] = {
  22. 'type': agreement.type,
  23. 'title': agreement.title,
  24. 'link': agreement.link,
  25. 'text': bool(agreement.text),
  26. }
  27. return agreements
  28. class Agreement(models.Model):
  29. TYPE_TOS = 'terms_of_service'
  30. TYPE_PRIVACY = 'privacy_policy'
  31. TYPE_CHOICES = [
  32. (TYPE_TOS, _('Terms of service')),
  33. (TYPE_PRIVACY, _('Privacy policy')),
  34. ]
  35. type = models.CharField(
  36. max_length=20,
  37. default=TYPE_TOS,
  38. choices=TYPE_CHOICES,
  39. db_index=True,
  40. )
  41. title = models.CharField(max_length=255, null=True, blank=True)
  42. link = models.URLField(max_length=255, null=True, blank=True)
  43. text = models.TextField(null=True, blank=True)
  44. is_active = models.BooleanField(default=False)
  45. created_on = models.DateTimeField(default=timezone.now)
  46. created_by = models.ForeignKey(
  47. settings.AUTH_USER_MODEL,
  48. blank=True,
  49. null=True,
  50. related_name='+',
  51. )
  52. created_by_name = models.CharField(max_length=255, null=True, blank=True)
  53. last_modified_on = models.DateTimeField(default=timezone.now)
  54. last_modified_by = models.ForeignKey(
  55. settings.AUTH_USER_MODEL,
  56. blank=True,
  57. null=True,
  58. related_name='+',
  59. )
  60. last_modified_by_name = models.CharField(max_length=255, null=True, blank=True)
  61. objects = AgreementManager()
  62. def get_final_title(self):
  63. return self.title or self.get_type_display()
  64. def set_created_by(self, user):
  65. self.created_by = user
  66. self.created_by_name = user.username
  67. def set_last_modified_by(self, user):
  68. self.last_modified_by = user
  69. self.last_modified_by_name = user.username
  70. class UserAgreement(models.Model):
  71. user = models.ForeignKey(
  72. settings.AUTH_USER_MODEL,
  73. blank=True,
  74. null=True,
  75. related_name='agreements'
  76. )
  77. agreement = models.ForeignKey(Agreement, related_name='agreements')
  78. accepted_on = models.DateTimeField(default=timezone.now)
  79. class Meta:
  80. ordering = ["-accepted_on"]