Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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
Пример #4
0
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
Пример #5
0
 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)
Пример #6
0
    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)
Пример #7
0
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")
Пример #8
0
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",
        )