warnings.py 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from django.utils.translation import ugettext_lazy as _
  2. import floppyforms as forms
  3. from misago.acl.builder import BaseACL
  4. from misago.forms import YesNoSwitch
  5. def make_form(request, role, form):
  6. if role.special != 'guest':
  7. form.base_fields['can_warn_members'] = forms.BooleanField(label=_("Can warn other members"),
  8. widget=YesNoSwitch, initial=False, required=False)
  9. form.base_fields['can_see_other_members_warns'] = forms.BooleanField(label=_("Can see other members warnings"),
  10. widget=YesNoSwitch, initial=False, required=False)
  11. form.base_fields['can_cancel_warnings'] = forms.BooleanField(label=_("Can cancel warnings"),
  12. widget=forms.Select, initial=0, coerce=int,
  13. choices=(
  14. (0, _("No")),
  15. (1, _("If is warning giver")),
  16. (2, _("Yes, all warnings")),
  17. ))
  18. form.base_fields['can_cancel_warnings_newer_than'] = forms.IntegerField(label=_("Maximum age of warning that can be canceled (in minutes)"),
  19. help_text=_("Enter zero to disable this limitation."),
  20. min_value=0, initial=15)
  21. form.base_fields['can_delete_warnings'] = forms.BooleanField(label=_("Can delete warnings"),
  22. widget=YesNoSwitch, initial=False, required=False)
  23. form.base_fields['can_be_warned'] = forms.BooleanField(label=_("Can be warned"),
  24. widget=YesNoSwitch, initial=False, required=False)
  25. form.fieldsets.append((
  26. _("Warning Members"),
  27. ('can_warn_members', 'can_see_other_members_warns',
  28. 'can_cancel_warnings', 'can_cancel_warnings_newer_than',
  29. 'can_delete_warnings', 'can_be_warned',)
  30. ))
  31. class WarningsACL(BaseACL):
  32. def can_warn_members(self):
  33. return self.acl['can_warn_members']
  34. def can_see_member_warns(self, user, other_user):
  35. if user.pk == other_user.pk:
  36. return Ture
  37. return self.acl['can_see_other_members_warns']
  38. def build(acl, roles):
  39. acl.warnings = WarningsACL()
  40. acl.warnings.acl['can_warn_members'] = False
  41. acl.warnings.acl['can_see_other_members_warns'] = False
  42. acl.warnings.acl['can_be_warned'] = False
  43. acl.warnings.acl['can_cancel_warnings'] = 0
  44. acl.warnings.acl['can_cancel_warnings_newer_than'] = 0
  45. acl.warnings.acl['can_delete_warnings'] = False
  46. for role in roles:
  47. try:
  48. if role['can_warn_members']:
  49. acl.warnings.acl['can_warn_members'] = True
  50. if role['can_see_other_members_warns']:
  51. acl.warnings.acl['can_see_other_members_warns'] = True
  52. if role['can_be_warned']:
  53. acl.warnings.acl['can_be_warned'] = True
  54. if role['can_cancel_warnings'] > acl.warnings.acl['can_cancel_warnings']:
  55. acl.warnings.acl['can_cancel_warnings'] = role['can_cancel_warnings']
  56. if (role['can_cancel_warnings_newer_than'] == 0
  57. or role['can_cancel_warnings_newer_than'] > acl.warnings.acl['can_cancel_warnings_newer_than']):
  58. acl.warnings.acl['can_cancel_warnings_newer_than'] = role['can_cancel_warnings_newer_than']
  59. if role['can_delete_warnings']:
  60. acl.warnings.acl['can_delete_warnings'] = True
  61. except KeyError:
  62. pass