def __call__(self): postback = True form = self.request.form submitted = form.get('form.submitted', False) cancel_button = form.get('form.button.Cancel', None) is not None if submitted and not cancel_button: if not self.request.get('REQUEST_METHOD', 'GET') == 'POST': raise Forbidden authenticator = \ self.context.restrictedTraverse('@@authenticator', None) if not authenticator.verify(): raise Forbidden inherit = bool(form.get('inherit', False)) reindex = {} reindex.update( \ dict([(v.context.getId(), v) for v in self.views if v.update_inherit(inherit, reindex=False)])) entries = form.get('entries', []) roles = [r['id'] for r in self.roles()] settings = [] for entry in entries: settings.append(dict(id = entry['id'], type = entry['type'], roles = [r for r in roles if entry.get('role_%s' % r, False)])) if settings: reindex.update( \ dict([(v.context.getId(), v) for v in self.views if v.update_role_settings(settings, reindex=False)])) if reindex: for context_id, view in reindex.items(): view.context.reindexObjectSecurity() IStatusMessage(self.request).addStatusMessage(_(u"Changes saved."), type='info') if cancel_button: postback = False if postback: return self.template() else: context_state = \ self.context.restrictedTraverse("@@plone_context_state") url = context_state.view_url() self.request.response.redirect(url) return self.template()
def role_settings(self): available_roles = [(r['id'], False )for r in self.roles()] default_settings = [dict(id = STICKY[0], type = 'group', title = _(u'Logged-in users'), disabled = False, roles = dict(available_roles))] if self.views: settings = [view.role_settings() for view in self.views] principal_settings_map = (dict([(p_settings['id'], p_settings) for p_settings in view_settings]) for view_settings in settings) try: first = next(principal_settings_map) if all(self._is_role_settings_equal(first, rest) for rest in principal_settings_map): return settings[0] else: return default_settings except StopIteration: return settings[0] return default_settings