patch_event.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from django.core.exceptions import PermissionDenied
  2. from django.utils.translation import ugettext as _
  3. from misago.acl import add_acl
  4. from misago.api.patch import ApiPatch
  5. from misago.threads import moderation
  6. from misago.threads.permissions import allow_hide_event, allow_unhide_event
  7. event_patch_dispatcher = ApiPatch()
  8. def patch_acl(request, event, value):
  9. """useful little op that updates event acl to current state"""
  10. if value:
  11. add_acl(request.user, event)
  12. return {'acl': event.acl}
  13. else:
  14. return {'acl': None}
  15. event_patch_dispatcher.add('acl', patch_acl)
  16. def patch_is_hidden(request, event, value):
  17. if value:
  18. allow_hide_event(request.user, event)
  19. moderation.hide_post(request.user, event)
  20. else:
  21. allow_unhide_event(request.user, event)
  22. moderation.unhide_post(request.user, event)
  23. return {'is_hidden': event.is_hidden}
  24. event_patch_dispatcher.replace('is-hidden', patch_is_hidden)
  25. def event_patch_endpoint(request, event):
  26. old_is_hidden = event.is_hidden
  27. response = event_patch_dispatcher.dispatch(request, event)
  28. if old_is_hidden != event.is_hidden:
  29. event.thread.synchronize()
  30. event.thread.save()
  31. event.category.synchronize()
  32. event.category.save()
  33. return response