Advertisement
Guest User

Untitled

a guest
Jan 24th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.76 KB | None | 0 0
  1. #################################################################################################
  2. # $HOME/.buildout/eggs/plone.app.workflow-2.1.9-py2.7.egg/plone/app/workflow/browser/sharing.py
  3. #################################################################################################
  4.  
  5. from plone.app.workflow.events import LocalrolesModifiedEvent
  6. from plone.app.workflow import PloneMessageFactory as _
  7. from Products.statusmessages.interfaces import IStatusMessage
  8. from zope.event import notify
  9.  
  10.  
  11. def sharing_handle_form(self):
  12. """
  13. We split this out so we can reuse this for ajax.
  14. Will return a boolean if it was a post or not
  15. """
  16.  
  17. postback = True
  18.  
  19. form = self.request.form
  20. submitted = form.get('form.submitted', False)
  21. save_button = form.get('form.button.Save', None) is not None
  22. cancel_button = form.get('form.button.Cancel', None) is not None
  23. if submitted and save_button and not cancel_button:
  24. if not self.request.get('REQUEST_METHOD', 'GET') == 'POST':
  25. raise Forbidden
  26.  
  27. old_ac_local_roles_block = getattr(self.context, '__ac_local_roles_block__', None)
  28.  
  29. authenticator = self.context.restrictedTraverse('@@authenticator',
  30. None)
  31. if not authenticator.verify():
  32. raise Forbidden
  33.  
  34. # Update the acquire-roles setting
  35. if self.can_edit_inherit():
  36. inherit = bool(form.get('inherit', False))
  37. reindex = self.update_inherit(inherit, reindex=False)
  38. else:
  39. reindex = False
  40.  
  41. entries = form.get('entries', [])
  42. roles = [r['id'] for r in self.roles()]
  43. settings = []
  44. for entry in entries:
  45. settings.append(
  46. dict(id=entry['id'],
  47. type=entry['type'],
  48. roles=[r for r in roles
  49. if entry.get('role_%s' % r, False)]))
  50. if settings:
  51.  
  52. old_settings = self.context.get_local_roles()
  53. old_settings_dict = dict([(userid, set(roles)) for userid, roles in old_settings])
  54. settings_dict = dict([(d['id'], set(d['roles'])) for d in settings])
  55.  
  56. old_userids = set([tp[0] for tp in old_settings if list(tp[1]) != ['Owner']])
  57. new_userids = set([d['id'] for d in settings if d['roles']])
  58. all_userids = old_userids | new_userids
  59.  
  60. reindex = self.update_role_settings(settings, reindex=False) \
  61. or reindex
  62. new_ac_local_roles_block = getattr(self.context, '__ac_local_roles_block__', None)
  63.  
  64. diff_context = dict()
  65. diff_context['removed_userids'] = old_userids - new_userids
  66. diff_context['added_userids'] = new_userids - old_userids
  67. diff_context['block_localroles'] = bool(new_ac_local_roles_block)
  68. diff_context['role_changes'] = dict()
  69. for userid, roles in settings_dict.items():
  70. old_roles = old_settings_dict.get(userid, ())
  71. if roles == old_roles:
  72. continue
  73.  
  74. roles_added = roles - old_roles
  75. roles_removed = old_roles - roles
  76. diff_context['role_changes'][userid] = dict(added=roles_added, removed=roles_removed)
  77.  
  78. if reindex:
  79. self.context.reindexObjectSecurity()
  80. event = LocalrolesModifiedEvent(self.context, self.request)
  81. event.diff_context = diff_context
  82. notify(event)
  83.  
  84. IStatusMessage(self.request).addStatusMessage(
  85. _(u"Changes saved."), type='info')
  86.  
  87. # Other buttons return to the sharing page
  88. if cancel_button:
  89. postback = False
  90.  
  91. return postback
  92.  
  93. from plone.app.workflow.browser.sharing import SharingView
  94. SharingView.handle_form = sharing_handle_form
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement