patch_event.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from ....acl.objectacl import add_acl_to_obj
  2. from ....core.apipatch import ApiPatch
  3. from ...moderation import posts as moderation
  4. from ...permissions import allow_hide_event, allow_unhide_event
  5. event_patch_dispatcher = ApiPatch()
  6. def patch_acl(request, event, value):
  7. """useful little op that updates event acl to current state"""
  8. if value:
  9. add_acl_to_obj(request.user_acl, event)
  10. return {"acl": event.acl}
  11. else:
  12. return {"acl": None}
  13. event_patch_dispatcher.add("acl", patch_acl)
  14. def patch_is_hidden(request, event, value):
  15. if value:
  16. allow_hide_event(request.user_acl, event)
  17. moderation.hide_post(request.user, event)
  18. else:
  19. allow_unhide_event(request.user_acl, event)
  20. moderation.unhide_post(request.user, event)
  21. return {"is_hidden": event.is_hidden}
  22. event_patch_dispatcher.replace("is-hidden", patch_is_hidden)
  23. def event_patch_endpoint(request, event):
  24. old_is_hidden = event.is_hidden
  25. response = event_patch_dispatcher.dispatch(request, event)
  26. if old_is_hidden != event.is_hidden:
  27. event.thread.synchronize()
  28. event.thread.save()
  29. event.category.synchronize()
  30. event.category.save()
  31. return response