Пример #1
0
def contained_within(viewlet):
    """
    walk up the acquisition chain and verify if the any either the context
    of the viewlet, or any of its parents, provide the viewlet.container
    interface

    returns the nearest satisfactory container or None.

    however, we don't want to go outside the current 'content locus' (portal,
    project or person) -- that is, if we're at /openplans/projects/foo/wikipage
    and the viewlet's contained_within filter is IAddProjects, this function
    should *not* return a true value.
    """

    from Acquisition import aq_inner, aq_parent

    obj = aq_inner(viewlet.context)
    iface = viewlet.container

    while obj is not None:
        if iface.providedBy(obj):
            return obj

        if IMemberFolder.providedBy(obj) or \
                IProject.providedBy(obj) or \
                IOpenSiteRoot.providedBy(obj):
            return None

        obj = aq_parent(obj)
        
    return None
Пример #2
0
 def project(self):
     proj_in_chain = super(ProjectInfoView, self).project
     if proj_in_chain is not None:
         return proj_in_chain
     # Use the headerhijack stuff.
     maybe_project = self.context
     if IProject.providedBy(maybe_project):
         return maybe_project
     else:
         return None
Пример #3
0
def get_project(context):  #XXX unused??
    """Given a context, return the nearest/parent openplans project
    """
    from opencore.interfaces import IProject
    chain = context.aq_chain
    for item in chain:
        if IProject.providedBy(item):
            return item
    raise LookupError(
        "No project could be found starting from the context %r"
        % context)
Пример #4
0
def notify_wikipage_deleted(page, event=None):
    parent = event.oldParent
    if not IProject.providedBy(parent):
        return #notify only on projects for now

    page_url = page.absolute_url()

    mtool = getToolByName(page, 'portal_membership')
    member = mtool.getAuthenticatedMember()
    username = member.getId()
    cabochon_utility = getUtility(ICabochonClient)
    cabochon_utility.notify_wikipage_deleted(page_url, username)
Пример #5
0
def project_contains_blog(f, obj, event):
    """decorator to verify that the project has a blog before
       sending the event to wordpress"""
    if IProject.providedBy(obj):
        proj_id = obj.getId()
        project = obj
    else:
        # it's a membership object
        team = obj.aq_inner.aq_parent
        proj_id = team.getId()
        portal = getToolByName(obj, 'portal_url').getPortalObject()
        try:
            project = portal.projects._getOb(proj_id)
        except KeyError:
            # cannot find project with same name as team (unit test only?)
            return
    for flet in get_featurelets(project):
        if flet['name'] == 'blog':
            break
    else:
        # no blog on project
        return
    f(obj, event)
Пример #6
0
def add_redirection_hooks(container, ignore=[]):
    for obj in container.objectValues():
        if IProject.providedBy(obj) and obj.getId() not in ignore:
            redirect.activate(obj)