models.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import base64
  2. from django.db import models
  3. from misago.admin import site as admin_site
  4. from misago.conf import hydrators
  5. try:
  6. import cPickle as pickle
  7. except ImportError:
  8. import pickle
  9. class SettingsGroupsManager(models.Manager):
  10. def ordered_alphabetically(self):
  11. from django.utils.translation import ugettext as _
  12. groups_dict = {}
  13. for group in self.all():
  14. groups_dict[_(group.name)] = group
  15. ordered_groups = []
  16. for key in groups_dict.keys():
  17. ordered_groups.append(groups_dict[key])
  18. return ordered_groups
  19. class SettingsGroup(models.Model):
  20. key = models.CharField(max_length=255, unique=True)
  21. name = models.CharField(max_length=255)
  22. description = models.TextField(null=True, blank=True)
  23. objects = SettingsGroupsManager()
  24. class Setting(models.Model):
  25. group = models.ForeignKey(SettingsGroup)
  26. setting = models.CharField(max_length=255, unique=True)
  27. name = models.CharField(max_length=255)
  28. description = models.TextField(null=True, blank=True)
  29. legend = models.CharField(max_length=255, null=True, blank=True)
  30. order = models.IntegerField(default=0, db_index=True)
  31. dry_value = models.TextField(null=True, blank=True)
  32. default_value = models.TextField(null=True, blank=True)
  33. python_type = models.CharField(max_length=255, default='string')
  34. is_lazy = models.BooleanField(default=False)
  35. form_field = models.CharField(max_length=255, default='text')
  36. pickled_field_extra = models.TextField(null=True, blank=True)
  37. @property
  38. def value(self):
  39. if not self.dry_value and self.default_value:
  40. return hydrators.hydrate_value(self.python_type,
  41. self.default_value)
  42. else:
  43. return hydrators.hydrate_value(self.python_type,
  44. self.dry_value)
  45. @value.setter
  46. def value(self, new_value):
  47. if new_value is not None:
  48. self.dry_value = hydrators.dehydrate_value(self.python_type,
  49. new_value)
  50. else:
  51. self.dry_value = None
  52. return self.value
  53. @property
  54. def has_custom_value(self):
  55. return self.dry_value and self.dry_value != self.default_value
  56. @property
  57. def field_extra(self):
  58. if self.pickled_field_extra:
  59. return pickle.loads(base64.decodestring(self.pickled_field_extra))
  60. else:
  61. return {}
  62. @field_extra.setter
  63. def field_extra(self, new_extra):
  64. if new_extra:
  65. pickled_extra = pickle.dumps(new_extra, pickle.HIGHEST_PROTOCOL)
  66. self.pickled_field_extra = base64.encodestring(pickled_extra)
  67. from django.utils.translation import ugettext_lazy as _
  68. admin_site.add_node(
  69. parent='misago:admin',
  70. link='misago:admin:index',
  71. icon='fa fa-home',
  72. name=_("Home"),
  73. )
  74. admin_site.add_node(
  75. parent='misago:admin',
  76. link='misago:admin:settings:index',
  77. icon='fa fa-gears',
  78. name=_("Settings"),
  79. )