models.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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=True):
  21. agreements[agreement.type] = {
  22. 'title': agreement.get_final_title(),
  23. 'link': agreement.link,
  24. 'text': bool(agreement.text),
  25. }
  26. return agreements
  27. class Agreement(models.Model):
  28. TYPE_TOS = 'terms_of_service'
  29. TYPE_PRIVACY = 'privacy_policy'
  30. TYPE_CHOICES = [
  31. (TYPE_TOS, _('Terms of service')),
  32. (TYPE_PRIVACY, _('Privacy policy')),
  33. ]
  34. type = models.CharField(
  35. max_length=20,
  36. default=TYPE_TOS,
  37. choices=TYPE_CHOICES,
  38. db_index=True,
  39. )
  40. title = models.CharField(max_length=255, null=True, blank=True)
  41. link = models.URLField(max_length=255, null=True, blank=True)
  42. text = models.TextField(null=True, blank=True)
  43. is_active = models.BooleanField(default=False)
  44. created_on = models.DateTimeField(default=timezone.now)
  45. created_by = models.ForeignKey(
  46. settings.AUTH_USER_MODEL,
  47. blank=True,
  48. null=True,
  49. related_name='+',
  50. )
  51. created_by_name = models.CharField(max_length=255, null=True, blank=True)
  52. last_modified_on = models.DateTimeField(null=True, blank=True)
  53. last_modified_by = models.ForeignKey(
  54. settings.AUTH_USER_MODEL,
  55. blank=True,
  56. null=True,
  57. related_name='+',
  58. )
  59. last_modified_by_name = models.CharField(max_length=255, null=True, blank=True)
  60. objects = AgreementManager()
  61. def get_final_title(self):
  62. return self.title or self.get_type_display()
  63. def set_created_by(self, user):
  64. self.created_by = user
  65. self.created_by_name = user.username
  66. def set_last_modified_by(self, user):
  67. self.last_modified_by = user
  68. self.last_modified_by_name = user.username
  69. class UserAgreement(models.Model):
  70. user = models.ForeignKey(
  71. settings.AUTH_USER_MODEL,
  72. blank=True,
  73. null=True,
  74. related_name='agreements'
  75. )
  76. agreement = models.ForeignKey(Agreement, related_name='agreements')
  77. accepted_on = models.DateTimeField(default=timezone.now)
  78. class Meta:
  79. ordering = ["-accepted_on"]