def assign_ownership(context): """Assign editorial (all context types) and legal (only legal types) "ownership" roles. The actual (current) user creating the context is always granted the "editorial ownership" for the item i.e. "bungeni.Drafter". If context is a "legal doc", then the user who would be the legal owner of the doc is determined and granted "legal ownership" i.e. "bungeni.Owner". """ # bungeni.Drafter - all types current_user_login = common.get_request_login() log.debug("assign_ownership: role %r to user %r on [%s]" % ( "bungeni.Drafter", current_user_login, context)) assign_role("bungeni.Drafter", current_user_login, context) # bungeni.Owner - legal documents only def is_legal_doc(context): # doc (but not event) types are legal documents return (interfaces.IDoc.providedBy(context) and not interfaces.IEvent.providedBy(context)) if is_legal_doc(context): owner_login = _determine_related_user(context).login log.debug("assign_ownership: role %r to user %r on [%s]" % ( "bungeni.Owner", owner_login, context)) assign_role("bungeni.Owner", owner_login, context)
def assign_ownership(context): """Assign editorial (all context types) and legal (only legal types) "ownership" roles. The actual (current) user creating the context is always granted the "editorial ownership" for the item i.e. "bungeni.Drafter". If context is a "legal doc", then the user who would be the legal owner of the doc is determined and granted "legal ownership" i.e. "bungeni.Owner". """ # bungeni.Drafter - all types current_user_login = common.get_request_login() log.debug("assign_ownership: role %r to user %r on [%s]" % ("bungeni.Drafter", current_user_login, context)) assign_role("bungeni.Drafter", current_user_login, context) # bungeni.Owner - legal documents only def is_legal_doc(context): # doc (but not event) types are legal documents return (interfaces.IDoc.providedBy(context) and not interfaces.IEvent.providedBy(context)) if is_legal_doc(context): owner_login = _determine_related_user(context).login log.debug("assign_ownership: role %r to user %r on [%s]" % ("bungeni.Owner", owner_login, context)) assign_role("bungeni.Owner", owner_login, context)
def get_login_user(): """Get the logged in user, if any. Returns None if no user logged in or no such user. """ login = common.get_request_login() try: return get_user_for_login(login) except sa.orm.exc.NoResultFound: return
def __call__(self, form, action, data): """Stuff additional form transition field values onto the request, and fire transition (context.status will be modified as a result of that). Redirects to the ``next_url`` location. """ context = getattr(form.context, "_object", form.context) log.debug(""" TransitionHandler.__call__() form=%s action=(name=%s, label=%s) data=%s principal_id=%s context=%s transition_id=%s next_url=%s current_url=%s """ % (form, action.label, action.name, data, common.get_request_login(), context, self.transition_id, form.next_url, form.request.getURL()) ) # dress-up transition data object data.setdefault("note", data.get("note", "")) data.setdefault("date_active", data.get("date_active", None)) data.setdefault("registry_number", data.get("registry_number", "")) # !+registry_number(mr, feb-2012) should be within a workflow action? reg_number = data.get("registry_number", "") if reg_number: unproxied_context = removeSecurityProxy(context) unproxied_context.registry_number = reg_number # !+ because WorkflowController API e.g. fireTransition(), ONLY # foresees for a comment attribute as additional data, we bypass # using that altogether, and pass it along downstream by stuffing # onto the request IAnnotations(form.request)["change_data"] = data interfaces.IWorkflowController(context).fireTransition( self.transition_id) # NOTE: for some reason form.next_url is (always?) None -- # in which case we redirect to HTTP_REFERER instead. next_url = form.next_url if next_url is None: next_url = form.request["HTTP_REFERER"] log.error(" TransitionHandler.__call__() => CANNOT redirect to " "next_url [None]... will try instead to redirect to " "HTTP_REFERER [%s]" % (next_url,)) return form.request.response.redirect(next_url)
def __call__(self, form, action, data): """Stuff additional form transition field values onto the request, and fire transition (context.status will be modified as a result of that). Redirects to the ``next_url`` location. """ context = getattr(form.context, "_object", form.context) log.debug(""" TransitionHandler.__call__() form=%s action=(name=%s, label=%s) data=%s principal_id=%s context=%s transition_id=%s next_url=%s current_url=%s """ % (form, action.label, action.name, data, common.get_request_login(), context, self.transition_id, form.next_url, form.request.getURL())) # dress-up transition data object data.setdefault("note", data.get("note", "")) data.setdefault("date_active", data.get("date_active", None)) data.setdefault("registry_number", data.get("registry_number", "")) # !+registry_number(mr, feb-2012) should be within a workflow action? reg_number = data.get("registry_number", "") if reg_number: unproxied_context = removeSecurityProxy(context) unproxied_context.registry_number = reg_number # !+ because WorkflowController API e.g. fireTransition(), ONLY # foresees for a comment attribute as additional data, we bypass # using that altogether, and pass it along downstream by stuffing # onto the request IAnnotations(form.request)["change_data"] = data interfaces.IWorkflowController(context).fireTransition( self.transition_id) # NOTE: for some reason form.next_url is (always?) None -- # in which case we redirect to HTTP_REFERER instead. next_url = form.next_url if next_url is None: next_url = form.request["HTTP_REFERER"] log.error(" TransitionHandler.__call__() => CANNOT redirect to " "next_url [None]... will try instead to redirect to " "HTTP_REFERER [%s]" % (next_url, )) return form.request.response.redirect(next_url)
def assign_ownership(context): """Assign editorial (all context types) and legal (only legal types) "ownership" roles. The actual (current) user creating the context is always granted the "editorial ownership" for the item i.e. "bungeni.Drafter". If context is a "legal doc", then the user who would be the legal owner of the doc is determined and granted "legal ownership" i.e. "bungeni.Owner". """ # bungeni.Drafter - all types current_user_login = common.get_request_login() log.debug("assign_ownership: role %r to user %r on [%s]", "bungeni.Drafter", current_user_login, context) set_role("bungeni.Drafter", current_user_login, context) # bungeni.Owner - selected types owner_login = None if interfaces.ILegislativeContent.providedBy(context): owner_login = _determine_related_user(context, user_attr_name="owner").login elif interfaces.IUser.providedBy(context): owner_login = context.login # !+GROUP_AS_GROUP_OWNER having the group itself be the "owner principal" is # problematic -- as every member of the group would also become the Owner of # the group, a privilege that is also passed on down onto each doc "belonging" # to the group... so, either Drafter/Owner roles on a group NOT transfer # down to each "doc" associated with the group, or use distinct roles for # this privilege e.g. GroupOwner/GroupDrafter, or just do not assign Owner # (as long as they are stricly not necessary)... #elif interfaces.IGroup.providedBy(context): # owner_login = context.principal_name elif interfaces.ISignatory.providedBy(context): owner_login = _determine_related_user(context, user_attr_name="user").login if owner_login is not None: log.debug("assign_ownership: role %r to user %r on [%s]", "bungeni.Owner", owner_login, context) set_role("bungeni.Owner", owner_login, context) else: log.warn( "assign_ownership: NO owner could be determined from [%s] - " "NOT assigning role %r to any user", context, "bungeni.Owner")
def assign_ownership(context): """Assign editorial (all context types) and legal (only legal types) "ownership" roles. The actual (current) user creating the context is always granted the "editorial ownership" for the item i.e. "bungeni.Drafter". If context is a "legal doc", then the user who would be the legal owner of the doc is determined and granted "legal ownership" i.e. "bungeni.Owner". """ # bungeni.Drafter - all types current_user_login = common.get_request_login() log.debug("assign_ownership: role %r to user %r on [%s]", "bungeni.Drafter", current_user_login, context) set_role("bungeni.Drafter", current_user_login, context) # bungeni.Owner - selected types owner_login = None if interfaces.ILegislativeContent.providedBy(context): owner_login = _determine_related_user(context, user_attr_name="owner").login elif interfaces.IUser.providedBy(context): owner_login = context.login # !+GROUP_AS_GROUP_OWNER having the group itself be the "owner principal" is # problematic -- as every member of the group would also become the Owner of # the group, a privilege that is also passed on down onto each doc "belonging" # to the group... so, either Drafter/Owner roles on a group NOT transfer # down to each "doc" associated with the group, or use distinct roles for # this privilege e.g. GroupOwner/GroupDrafter, or just do not assign Owner # (as long as they are stricly not necessary)... # elif interfaces.IGroup.providedBy(context): # owner_login = context.principal_name elif interfaces.ISignatory.providedBy(context): owner_login = _determine_related_user(context, user_attr_name="user").login if owner_login is not None: log.debug("assign_ownership: role %r to user %r on [%s]", "bungeni.Owner", owner_login, context) set_role("bungeni.Owner", owner_login, context) else: log.warn( "assign_ownership: NO owner could be determined from [%s] - " "NOT assigning role %r to any user", context, "bungeni.Owner", )