Пример #1
0
 def test_anonymous_ec(self):
     sm = getSiteManager()
     self.portal.portal_membership = DummyMembershipTool()
     sm.registerUtility(self.portal.portal_membership, IMembershipTool)
     ec = createExprContext(self.folder, self.portal, self.object)
     member = ec.contexts['member']
     self.failIf(member)
    def evaluateExpression(self, expression, context):
        """Evaluate an object's TALES condition to see if it should be
        displayed.
        """
        try:
            if expression.text and context is not None:
                portal = getToolByName(context, 'portal_url').getPortalObject()

                # Find folder (code courtesy of CMFCore.ActionsTool)
                if context is None or not hasattr(context, 'aq_base'):
                    folder = portal
                else:
                    folder = context
                    # Search up the containment hierarchy until we find an
                    # object that claims it's PrincipiaFolderish.
                    while folder is not None:
                        if getattr(aq_base(folder), 'isPrincipiaFolderish', 0):
                            # found it.
                            break
                        else:
                            folder = aq_parent(aq_inner(folder))

                __traceback_info__ = (folder, portal, context, expression)
                ec = createExprContext(folder, portal, context)
                # add 'context' as an alias for 'object'
                ec.setGlobal('context', context)
                return expression(ec)
            else:
                return True
        except AttributeError:
            return True
 def __call__(self):
     object = self.event.object
     folder = self.context
     portal = getToolByName(folder, 'portal_url').getPortalObject()
     expression = self.element.tales_expression
     ec = createExprContext(folder, portal, object)
     return bool(Expression(expression)(ec))
def _evaluateExpression(obj,
                        expression,
                        roles_bypassing_expression=[],
                        extra_expr_ctx={},
                        empty_expr_is_true=True,
                        error_pattern=WRONG_TAL_CONDITION,
                        raise_on_error=False):
    """Evaluate given p_expression extending expression context with p_extra_expr_ctx."""
    if not expression or not expression.strip():
        return empty_expr_is_true

    res = True
    member = api.user.get_current()
    for role in roles_bypassing_expression or []:
        if member.has_role(str(role), obj):
            return res
    portal = api.portal.get()
    ctx = createExprContext(obj.aq_inner.aq_parent,
                            portal,
                            obj)
    ctx.setGlobal('member', member)
    ctx.setGlobal('context', obj)
    ctx.setGlobal('portal', portal)
    for extra_key, extra_value in extra_expr_ctx.items():
        ctx.setGlobal(extra_key, extra_value)

    if raise_on_error:
        res = Expression(expression)(ctx)
    else:
        try:
            res = Expression(expression)(ctx)
        except Exception, e:
            logger.warn(error_pattern.format(
                expression, obj.absolute_url(), str(e)))
            res = False
Пример #5
0
    def evaluate(self, expression, context, **kwargs):
        try:
            # Find folder (code courtesy of CMFCore.ActionsTool)
            if context is None or not hasattr(context, 'aq_base'):
                folder = self.site
            else:
                folder = context
                # Search up the containment hierarchy until we find an
                # object that claims it's PrincipiaFolderish.
                while folder is not None:
                    if getattr(aq_base(folder), 'isPrincipiaFolderish', 0):
                        # found it.
                        break
                    else:
                        folder = aq_parent(aq_inner(folder))

            __traceback_info__ = (folder, self.site, context, expression)
            ec = createExprContext(folder, self.site, context)
            # add 'context' as an alias for 'object'
            ec.setGlobal('context', context)
            ec.contexts.update({
                'context': context,
            })
            ec.contexts.update(kwargs)
            for name, val in kwargs.items():
                ec.setGlobal(name, val)
            return expression(ec)
        except AttributeError:
            pass
Пример #6
0
    def enumConfiglets(self, group=None):
        portal = getToolByName(self, 'portal_url').getPortalObject()
        context = createExprContext(self, portal, self)
        res = []
        for a in self.listActions():
            verified = 0
            for permission in a.permissions:
                if _checkPermission(permission, portal):
                    verified = 1
            if verified and a.category == group and a.testCondition(context) \
                    and a.visible:
                res.append(a.getAction(context))
        # Translate the title for sorting
        if getattr(self, 'REQUEST', None) is not None:
            for a in res:
                title = a['title']
                if not isinstance(title, Message):
                    title = Message(title, domain='plone')
                a['title'] = translate(title,
                                       context=self.REQUEST)

        def _id(v):
            return v['id']
        res.sort(key=_id)
        return res
Пример #7
0
def updateMenu(self):
    out = ''

    pu = getToolByName(self, 'plone_utils')

    if hasattr(pu, 'createTopLevelTabs'):
        pactions = getToolByName(self, 'portal_actions').listFilteredActionsFor(self)
        tl_tabs = pu.createTopLevelTabs(pactions)

        for act in tl_tabs:
                out += '<li id="portaltab-%s" class="plain"><a href="%s" accesskey="t">' % \
                    (act['id'], act['url']) + act['name'] + '</a></li>\n'
    else:
        portal = getToolByName(self, 'portal_url').getPortalObject()

        portal_act = getToolByName(self, 'portal_actions')
        actions=portal_act._cloneActions()

        for act in actions:
            if act.category == 'portal_tabs':
                out += '<li id="portaltab-%s" class="plain"><a href="%s" accesskey="t">%s</a></li>\n' % \
                    (act.id, \
                     Expression(act.getActionExpression())(createExprContext(portal, portal, portal)), \
                     act.title)

    portal_props = getToolByName(self, 'portal_properties')
    if not hasattr(portal_props, PROPERTY_SHEET):
        portal_props.addPropertySheet(PROPERTY_SHEET, 'DropDown Menu Properties')
    ap = getattr(portal_props, PROPERTY_SHEET)
    safeEditProperty(ap, 'menu', out, 'text')
Пример #8
0
 def test_authenticatedUser_ec(self):
     sm = getSiteManager()
     self.portal.portal_membership = DummyMembershipTool(anon=0)
     sm.registerUtility(self.portal.portal_membership, IMembershipTool)
     ec = createExprContext(self.folder, self.portal, self.object)
     member = ec.contexts['member']
     self.assertEqual(member.getId(), 'dummy')
Пример #9
0
 def test_authenticatedUser_ec(self):
     self.portal.portal_membership = DummyMembershipTool(anon=0)
     ec = createExprContext(self.folder, self.portal, self.object)
     if hasattr(ec, 'contexts'):
         member = ec.contexts['member']
     else:
         # BBB: for Zope 2.9
         member = ec.global_vars['member']
     self.assertEqual(member.getId(), 'dummy')
Пример #10
0
 def test_anonymous_ec(self):
     self.portal.portal_membership = DummyMembershipTool()
     ec = createExprContext(self.folder, self.portal, self.object)
     if hasattr(ec, 'contexts'):
         member = ec.contexts['member']
     else:
         # BBB: for Zope 2.9
         member = ec.global_vars['member']
     self.failIf(member)
Пример #11
0
 def __call__(self):
     object = self.event.object
     folder = self.context
     portal = getToolByName(folder, 'portal_url').getPortalObject()
     expression = self.element.tales_expression
     ec = createExprContext(folder, portal, object)
     # Workaround CMFCore/PageTemplates issue with unicode missing context
     ec.contexts['context'] = ec.contexts['here']
     return bool(Expression(expression)(ec))
Пример #12
0
 def testCondition(self, folder, portal, object):
     """Test the widget condition."""
     try:
         if self.condition:
             __traceback_info__ = (folder, portal, object, self.condition)
             ec = createExprContext(folder, portal, object)
             return Expression(self.condition)(ec)
         else:
             return True
     except AttributeError:
         return True
Пример #13
0
    def test_copy(self):
        action = {'name': 'foo', 'url': '', 'permissions': ('View',)}
        ec = createExprContext(self.site, self.site, None)
        ai = self._makeOne(action, ec)
        ai2 = ai.copy()

        self.assertEqual( ai._lazy_keys, ['allowed'] )
        self.assertEqual( ai2._lazy_keys, ['allowed'] )
        self.failIf( ai2._lazy_keys is ai._lazy_keys )
        self.assertEqual( ai['allowed'], True )
        self.assertEqual( ai2['allowed'], True )
Пример #14
0
    def url(self):
        context = self.context
        portal_url = getToolByName(context, 'portal_url')
        portal = portal_url.getPortalObject()

        ec = createExprContext(aq_parent(context), portal, context)
        icon = self.obj.getIconExprObject()
        path = ''
        if icon:
            path = icon(ec)
        return path
Пример #15
0
 def testSubfieldCondition(self, subfield, folder, portal, object):
     """Test the subfield condition."""
     try:
         condition = self.subfield_conditions.get(subfield, None)
         if condition is not None:
             __traceback_info__ = (folder, portal, object, condition)
             ec = createExprContext(folder, portal, object)
             return Expression(condition)(ec)
         else:
             return True
     except AttributeError:
         return True
Пример #16
0
 def testCondition(self, folder, portal, object):
     """Test the widget condition."""
     try:
         if self.condition:
             if folder is None and object is not None:
                 folder = aq_parent(aq_inner(object))
             __traceback_info__ = (folder, portal, object, self.condition)
             ec = createExprContext(folder, portal, object)
             return Expression(self.condition)(ec)
         else:
             return True
     except AttributeError:
         return True
Пример #17
0
    def test_Condition(self):
        portal = self.portal
        folder = self.folder
        object = self.object
        ai = self._makeOne( id='view',
                            title='View',
                            action=Expression(text='view'),
                            condition=Expression(text='member'),
                            category='global',
                            visible=True )
        ec = createExprContext(folder, portal, object)

        self.failIf(ai.testCondition(ec))
def execute_expression(expr, folder, portal, context=None, **kwargs):
    """ Execute and expand a given TALES `expr`.

    Because the way in which portlets are rendered, the context needs
    to be corrected to be the surrounding folder.

    Also accepts arbitrary kwargs and applies them into the expression
    context for execution.
    """
    ec = createExprContext(folder, portal, context)
    ec.contexts['context'] = ec.contexts['here']
    ec.vars['context'] = ec.vars['here']
    for key, value in kwargs.iteritems():
        ec.setLocal(key, value)
    return Expression(expr)(ec)
Пример #19
0
 def test_ec_context(self):
     self.portal.portal_membership = DummyMembershipTool()
     ec = createExprContext(self.folder, self.portal, self.object)
     object = ec.contexts['object']
     portal = ec.contexts['portal']
     folder = ec.contexts['folder']
     self.assertTrue(object)
     self.assertEqual(object.id, 'bar')
     self.assertEqual(object.absolute_url(), 'url_bar')
     self.assertTrue(portal)
     self.assertEqual(portal.id, 'portal')
     self.assertEqual(portal.absolute_url(), 'url_portal')
     self.assertTrue(folder)
     self.assertEqual(folder.id, 'foo')
     self.assertEqual(folder.absolute_url(), 'url_foo')
Пример #20
0
    def test_category_object(self):
        # Permissions for action category 'object*' should be
        # evaluated in object context.
        manage_addFolder(self.site, 'actions_dummy')
        self.object = self.site.actions_dummy
        self.object.manage_permission('View', [], acquire=0)

        WANTED = {'allowed': False, 'category': 'object'}

        action = {'name': 'foo', 'url': '', 'permissions': ('View',)}
        ec = createExprContext(self.site, self.site, self.object)
        ai = self._makeOne(action, ec)

        self.assertEqual( ai['category'], WANTED['category'] )
        self.assertEqual( ai['allowed'], WANTED['allowed'] )
Пример #21
0
    def test_create_from_dict(self):
        WANTED = {'allowed': True, 'available': True, 'category': 'object',
                  'id': 'foo', 'title': 'foo', 'url': '', 'visible': True}

        action = {'name': 'foo', 'url': '', 'permissions': ('View',)}
        ec = createExprContext(self.site, self.site, None)
        ai = self._makeOne(action, ec)

        self.assertEqual( ai['id'], WANTED['id'] )
        self.assertEqual( ai['title'], WANTED['title'] )
        self.assertEqual( ai['url'], WANTED['url'] )
        self.assertEqual( ai['category'], WANTED['category'] )
        self.assertEqual( ai['visible'], WANTED['visible'] )
        self.assertEqual( ai['available'], WANTED['available'] )
        self.assertEqual( ai['allowed'], WANTED['allowed'] )
        self.assertEqual( ai, WANTED )
Пример #22
0
 def test_ec_context(self):
     sm = getSiteManager()
     sm.registerUtility(DummyMembershipTool(), IMembershipTool)
     ec = createExprContext(self.folder, self.portal, self.object)
     object = ec.contexts['object']
     portal = ec.contexts['portal']
     folder = ec.contexts['folder']
     self.failUnless(object)
     self.assertEqual(object.id, 'bar')
     self.assertEqual(object.absolute_url(), 'url_bar')
     self.failUnless(portal)
     self.assertEqual(portal.id, 'portal')
     self.assertEqual(portal.absolute_url(), 'url_portal')
     self.failUnless(folder)
     self.assertEqual(folder.id, 'foo')
     self.assertEqual(folder.absolute_url(), 'url_foo')
Пример #23
0
    def test_Condition_PathExpression(self):
        portal = self.portal
        folder = self.folder
        object = self.object
        manage_addPythonScript(self.app, 'test_script')
        script = self.app.test_script
        script.ZPythonScript_edit('', 'return context.getId()')
        ai = self._makeOne(id='view',
                           title='View',
                           action=Expression(text='view'),
                           condition=Expression(text='portal/test_script'),
                           category='global',
                           visible=True)
        ec = createExprContext(folder, portal, object)

        self.failUnless(ai.testCondition(ec))
Пример #24
0
    def test_category_document(self):
        # Permissions for action category 'document*' should be
        # evaluated in object context (not in portal context).
        manage_addFolder(self.site, 'actions_dummy')
        self.object = self.site.actions_dummy
        self.object.manage_permission('View', [], acquire=0)

        WANTED = {'allowed': False, 'category': 'document'}

        action = {'name': 'foo', 'url': '', 'permissions': ('View', )}
        ec = createExprContext(self.site, self.site, self.object)
        ai = self._makeOne(action, ec)
        ai['category'] = 'document'  # pfff

        self.assertEqual(ai['category'], WANTED['category'])
        self.assertEqual(ai['allowed'], WANTED['allowed'])
Пример #25
0
    def test_create_from_dict(self):
        WANTED = {'allowed': True, 'available': True, 'category': 'object',
                  'id': 'foo', 'title': 'foo', 'url': '', 'visible': True}

        action = {'name': 'foo', 'url': '', 'permissions': ('View',)}
        ec = createExprContext(self.site, self.site, None)
        ai = self._makeOne(action, ec)

        self.assertEqual( ai['id'], WANTED['id'] )
        self.assertEqual( ai['title'], WANTED['title'] )
        self.assertEqual( ai['url'], WANTED['url'] )
        self.assertEqual( ai['category'], WANTED['category'] )
        self.assertEqual( ai['visible'], WANTED['visible'] )
        self.assertEqual( ai['available'], WANTED['available'] )
        self.assertEqual( ai['allowed'], WANTED['allowed'] )
        self.assertEqual( ai, WANTED )
Пример #26
0
 def _getExpressionContext(self, object):
     portal = aq_parent(aq_inner(self))
     if object is None or not hasattr(object, 'aq_base'):
         folder = portal
     else:
         folder = object
         # Search up the containment hierarchy until we find an
         # object that claims it's a folder.
         while folder is not None:
             if getattr(aq_base(folder), 'isPrincipiaFolderish', 0):
                 # found it.
                 break
             else:
                 folder = aq_parent(aq_inner(folder))
     ec = createExprContext(folder, portal, object)
     return ec
Пример #27
0
    def test_Condition_PathExpression(self):
        portal = self.portal
        folder = self.folder
        object = self.object
        manage_addPythonScript(self.root, 'test_script')
        script = self.root.test_script
        script.ZPythonScript_edit('', 'return context.getId()')
        ai = self._makeOne( id='view',
                            title='View',
                            action=Expression(text='view'),
                            condition=Expression(text='portal/test_script'),
                            category='global',
                            visible=True )
        ec = createExprContext(folder, portal, object)

        self.failUnless(ai.testCondition(ec))
 def test_ec_context(self):
     sm = getSiteManager()
     sm.registerUtility(DummyMembershipTool(), IMembershipTool)
     ec = createExprContext(self.folder, self.portal, self.object)
     object = ec.contexts['object']
     portal = ec.contexts['portal']
     folder = ec.contexts['folder']
     self.assertTrue(object)
     self.assertEqual(object.id, 'bar')
     self.assertEqual(object.absolute_url(), 'url_bar')
     self.assertTrue(portal)
     self.assertEqual(portal.id, 'portal')
     self.assertEqual(portal.absolute_url(), 'url_portal')
     self.assertTrue(folder)
     self.assertEqual(folder.id, 'foo')
     self.assertEqual(folder.absolute_url(), 'url_foo')
Пример #29
0
    def portletVisibilityInContext(self, context):
        """Evaluates expressions."""
        context = self.getCallingContext(context)
        try:
            if self.condition and context is not None:
                portal = getToolByName(self, 'portal_url').getPortalObject()
                object = self
                __traceback_info__ = (context, portal, object, self.condition)
                ec = createExprContext(context, portal, object)
                return Expression(self.condition)(ec)
            else:
                return 0
        except AttributeError:
            return 0

        return self.hasPortletData()
Пример #30
0
 def _getExpressionContext(self, object):
     portal = aq_parent(aq_inner(self))
     if object is None or not hasattr(object, 'aq_base'):
         folder = portal
     else:
         folder = object
         # Search up the containment hierarchy until we find an
         # object that claims it's a folder.
         while folder is not None:
             if getattr(aq_base(folder), 'isPrincipiaFolderish', 0):
                 # found it.
                 break
             else:
                 folder = aq_parent(aq_inner(folder))
     ec = createExprContext(folder, portal, object)
     return ec
Пример #31
0
    def test_category_folder(self):
        # Permissions for action category 'folder*' should be
        # evaluated in folder context.
        manage_addFolder(self.site, 'actions_dummy')
        self.folder = self.site.actions_dummy
        self.folder.manage_permission('View', [], acquire=0)

        WANTED = {'allowed': False, 'category': 'folder'}

        action = {'name': 'foo', 'url': '', 'permissions': ('View',)}
        ec = createExprContext(self.folder, self.site, None)
        ai = self._makeOne(action, ec)
        ai['category'] = 'folder' # pfff

        self.assertEqual( ai['category'], WANTED['category'] )
        self.assertEqual( ai['allowed'], WANTED['allowed'] )
Пример #32
0
 def content_types(self):
     context = aq_inner(self.context)
     request = self.request
     portal_state = getMultiAdapter((context, request),
                                    name='plone_portal_state')
     site = portal_state.portal()
     ttool = getToolByName(site, 'portal_types', None)
     idnormalizer = queryUtility(IIDNormalizer)
     expr_context = createExprContext(aq_parent(context),
                                      portal_state.portal(), context)
     if ttool is None:
         return []
     results = []
     for t in ttool.listContentTypes():
         if t not in BAD_TYPES:
             fti = ttool[t]
             typeId = fti.getId()
             cssId = idnormalizer.normalize(typeId)
             cssClass = 'contenttype-%s' % cssId
             # if cssClass in self.all_content_types.keys():
             #     del(self.all_content_types[cssClass])
             try:
                 icon = fti.getIconExprObject()
                 if icon:
                     icon = icon(expr_context)
             except AttributeError:  # we are using plone 3
                 icon = "%s/%s" % (site.absolute_url(), fti.getIcon())
             results.append({
                 'id': typeId,
                 'title': fti.Title(),
                 'description': fti.Description(),
                 'action': None,
                 'selected': False,
                 'icon': icon,
                 'extra': {
                     'id': cssId,
                     'separator': None,
                     'class': cssClass
                 },
                 'submenu': None,
             })
     results = [(translate(ctype['title'], context=request), ctype)
                for ctype in results]
     results.sort()
     results = [ctype[-1] for ctype in results]
     return results
Пример #33
0
 def content_types(self):
     context = aq_inner(self.context)
     request = self.request
     portal_state = getMultiAdapter((context, request),
                                    name='plone_portal_state')
     site = portal_state.portal()
     ttool = getToolByName(site, 'portal_types', None)
     idnormalizer = queryUtility(IIDNormalizer)
     expr_context = createExprContext(
         aq_parent(context), portal_state.portal(), context)
     if ttool is None:
         return []
     results = []
     for t in ttool.listContentTypes():
         if t not in BAD_TYPES:
             fti = ttool[t]
             typeId = fti.getId()
             cssId = idnormalizer.normalize(typeId)
             cssClass = 'contenttype-%s' % cssId
             # if cssClass in self.all_content_types.keys():
             #     del(self.all_content_types[cssClass])
             try:
                 icon = fti.getIconExprObject()
                 if icon:
                     icon = icon(expr_context)
             except AttributeError:
                 icon = "%s/%s" % (site.absolute_url(), fti.getIcon())
             results.append({'id': typeId,
                             'title': fti.Title(),
                             'description': fti.Description(),
                             'action': None,
                             'selected': False,
                             'icon': icon,
                             'extra': {'id': cssId,
                                       'separator': None,
                                       'class': cssClass},
                             'submenu': None,
                             })
     results = [(translate(ctype['title'], context=request),
                 ctype) for ctype in results]
     results.sort()
     results = [ctype[-1] for ctype in results]
     return results
Пример #34
0
    def getSuitableProcesses(self):
        """Returns a list of suitable processes."""
        # acquire expression text; if none can be found return all processes
        expr_text = getattr(self, 'alf_suitable_processes', None)
        if expr_text is None:
            pm = getToolByName(self, "workflow_manager")
            user = getSecurityManager().getUser()
            user_roles = set(user.getRolesInContext(self))
            processes = [p.current() for p in pm.processes.objectValues()]

            return [process.aq_parent for process in processes
                    if not process.roles
                    or user_roles.intersection(process.roles)]

        folder = self.getParentNode()
        portal = getToolByName(self, 'portal_url').getPortalObject()
        context = createExprContext(folder, portal, self)
        expr = Expression(expr_text)
        return expr(context)
Пример #35
0
 def renderTALExpression(self, context, portal, expression, vars={}):
     """
       Renders given TAL expression in p_expression.
       p_vars contains extra variables that will be done available in the TAL expression to render
     """
     res = ''
     if expression:
         expression = expression.strip()
         ctx = createExprContext(context.aq_inner.aq_parent, portal, context)
         vars['context'] = context
         ctx.vars.update(vars)
         for k, v in vars.items():
             ctx.setContext(k, v)
         res = Expression(expression)(ctx)
     # make sure we do not return None because it breaks SOAP call
     if res is None:
         return u''
     else:
         return res
Пример #36
0
 def test_ec_context(self):
     self.portal.portal_membership = DummyMembershipTool()
     ec = createExprContext(self.folder, self.portal, self.object)
     if hasattr(ec, 'contexts'):
         contexts = ec.contexts
     else:
         # BBB: for Zope 2.9
         contexts = ec.global_vars
     object = contexts['object']
     portal = contexts['portal']
     folder = contexts['folder']
     self.failUnless(object)
     self.assertEqual(object.id, 'bar')
     self.assertEqual(object.absolute_url(), 'url_bar')
     self.failUnless(portal)
     self.assertEqual(portal.id, 'portal')
     self.assertEqual(portal.absolute_url(), 'url_portal')
     self.failUnless(folder)
     self.assertEqual(folder.id, 'foo')
     self.assertEqual(folder.absolute_url(), 'url_foo')
Пример #37
0
 def test_ec_context(self):
     self.portal.portal_membership = DummyMembershipTool()
     ec = createExprContext(self.folder, self.portal, self.object)
     if hasattr(ec, 'contexts'):
         contexts = ec.contexts
     else:
         # BBB: for Zope 2.9
         contexts = ec.global_vars
     object = contexts['object']
     portal = contexts['portal']
     folder = contexts['folder']
     self.failUnless(object)
     self.assertEqual(object.id, 'bar')
     self.assertEqual(object.absolute_url(), 'url_bar')
     self.failUnless(portal)
     self.assertEqual(portal.id, 'portal')
     self.assertEqual(portal.absolute_url(), 'url_portal')
     self.failUnless(folder)
     self.assertEqual(folder.id, 'foo')
     self.assertEqual(folder.absolute_url(), 'url_foo')
Пример #38
0
 def isApplicable(self, obj):
     '''May the current user use this template for generating documents ?'''
     user = self.portal_membership.getAuthenticatedMember()
     res = False
     # Check permissions
     isAllowed = True
     for podPermission in self.getPodPermission():
         if not user.has_permission(podPermission, obj):
             isAllowed = False
             break
     if isAllowed:
         res = True # At least for now
         # Check condition
         if self.getPodCondition().strip():
             portal = getToolByName(self, 'portal_url').getPortalObject()
             ctx = createExprContext(obj.getParentNode(), portal, obj)
             try:
                 res = Expression(self.getPodCondition())(ctx)
             except Exception, e:
                 logger.warn(self.BAD_CONDITION % (self.getPodCondition(),
                             str(e)))
                 res = False
Пример #39
0
 def enumConfiglets(self, group=None):
     portal=getToolByName(self, 'portal_url').getPortalObject()
     mtool = getToolByName(self, 'portal_membership')
     context=createExprContext(self, portal, self)
     res = []
     for a in self.listActions():
         verified = 0
         for permission in a.permissions:
             if _checkPermission(permission, portal):
                 verified = 1
         if verified and a.category==group and a.testCondition(context):
             res.append(a.getAction(context))
     # Translate the title for sorting
     if getattr(self, 'REQUEST', None) is not None:
         for a in res:
             a['title'] = translate(a['title'],
                                    domain='plone',
                                    context=self.REQUEST)
     def _title(v):
         return v['title']
     res.sort(key=_title)
     return res
Пример #40
0
    def addable_types(self, include=None):
        """Return menu item entries in a TAL-friendly form.

        Pass a list of type ids to 'include' to explicitly allow a list of
        types.
        """

        context = aq_inner(self.context)
        request = self.request

        results = []

        idnormalizer = queryUtility(IIDNormalizer)
        portal_state = getMultiAdapter((context, request), name='plone_portal_state')
        portal_url = portal_state.portal_url()

        addContext = self.add_context()
        baseUrl = addContext.absolute_url()

        allowedTypes = _allowedTypes(request, addContext)

        types_tool = getToolByName(context, 'portal_types')

        # Note: we don't check 'allowed' or 'available' here, because these are
        # slow. We assume the 'allowedTypes' list has already performed the
        # necessary calculations
        actions = types_tool.listActionInfos(
            object=addContext,
            check_permissions=False,
            check_condition=False,
            category='folder/add',
        )
        addActionsById = dict([(a['id'], a) for a in actions])

        expr_context = createExprContext(
            aq_parent(addContext), portal_state.portal(), addContext)
        for t in allowedTypes:
            typeId = t.getId()
            if include is None or typeId in include:
                cssId = idnormalizer.normalize(typeId)
                cssClass = 'contenttype-%s' % cssId

                url = None
                addAction = addActionsById.get(typeId, None)
                if addAction is not None:
                    url = addAction['url']

                if not url:
                    url = '%s/createObject?type_name=%s' % (baseUrl, quote_plus(typeId),)

                icon = t.getIconExprObject()
                if icon:
                    icon = icon(expr_context)

                results.append({ 'id'           : typeId,
                                 'title'        : t.Title(),
                                 'description'  : t.Description(),
                                 'action'       : url,
                                 'selected'     : False,
                                 'icon'         : icon,
                                 'extra'        : {'id' : cssId, 'separator' : None, 'class' : cssClass},
                                 'submenu'      : None,
                                })

        # Sort the addable content types based on their translated title
        results = [(translate(ctype['title'], context=request), ctype) for ctype in results]
        results.sort()
        results = [ctype[-1] for ctype in results]

        return results
Пример #41
0
 def test_anonymous_ec(self):
     self.portal.portal_membership = DummyMembershipTool()
     ec = createExprContext(self.folder, self.portal, self.object)
     member = ec.contexts['member']
     self.failIf(member)
Пример #42
0
 def test_authenticatedUser_ec(self):
     self.portal.portal_membership = DummyMembershipTool(anon=0)
     ec = createExprContext(self.folder, self.portal, self.object)
     member = ec.contexts['member']
     self.assertEqual(member.getId(), 'dummy')
Пример #43
0
 def test_authenticatedUser_ec(self):
     sm = getSiteManager()
     sm.registerUtility(DummyMembershipTool(anon=0), IMembershipTool)
     ec = createExprContext(self.folder, self.portal, self.object)
     member = ec.contexts['member']
     self.assertEqual(member.getId(), 'dummy')
Пример #44
0
 def test_anonymous_ec(self):
     sm = getSiteManager()
     sm.registerUtility(DummyMembershipTool(), IMembershipTool)
     ec = createExprContext(self.folder, self.portal, self.object)
     member = ec.contexts['member']
     self.assertFalse(member)
Пример #45
0
    def addable_types(self, include=None):
        """Return menu item entries in a TAL-friendly form.

        Pass a list of type ids to 'include' to explicitly allow a list of
        types.
        """

        context = aq_inner(self.context)
        request = self.request

        results = []

        idnormalizer = queryUtility(IIDNormalizer)
        portal_state = getMultiAdapter((context, request),
                                       name='plone_portal_state')

        addContext = self.add_context()
        baseUrl = addContext.absolute_url()
        token = createToken()

        allowedTypes = _allowedTypes(request, addContext)

        types_tool = getToolByName(context, 'portal_types')

        # Note: we don't check 'allowed' or 'available' here, because these are
        # slow. We assume the 'allowedTypes' list has already performed the
        # necessary calculations
        actions = types_tool.listActionInfos(
            object=addContext,
            check_permissions=False,
            check_condition=False,
            category='folder/add',
        )
        addActionsById = dict([(a['id'], a) for a in actions])

        expr_context = createExprContext(
            aq_parent(addContext), portal_state.portal(), addContext)
        for t in allowedTypes:
            typeId = t.getId()
            if include is None or typeId in include:
                cssId = idnormalizer.normalize(typeId)
                cssClass = 'contenttype-%s' % cssId

                url = None
                addAction = addActionsById.get(typeId, None)
                if addAction is not None:
                    url = addAction['url']

                if not url:
                    url = '%s/createObject?type_name=%s&_authenticator=%s' % (
                        baseUrl, quote_plus(typeId), token)

                icon = t.getIconExprObject()
                if icon:
                    icon = icon(expr_context)

                results.append({
                    'id': typeId,
                    'title': t.Title(),
                    'description': t.Description(),
                    'action': url,
                    'selected': False,
                    'icon': icon,
                    'extra': {
                        'id': cssId,
                        'separator': None,
                        'class': cssClass},
                    'submenu': None,
                })

        # Sort the addable content types based on their translated title
        results = [(translate(ctype['title'], context=request), ctype)
                   for ctype in results]
        results.sort()
        results = [ctype[-1] for ctype in results]

        return results