本文整理匯總了Python中Products.CMFCore.interfaces.IActionProvider.providedBy方法的典型用法代碼示例。如果您正苦於以下問題:Python IActionProvider.providedBy方法的具體用法?Python IActionProvider.providedBy怎麽用?Python IActionProvider.providedBy使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類Products.CMFCore.interfaces.IActionProvider
的用法示例。
在下文中一共展示了IActionProvider.providedBy方法的11個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: listFilteredActionsFor
# 需要導入模塊: from Products.CMFCore.interfaces import IActionProvider [as 別名]
# 或者: from Products.CMFCore.interfaces.IActionProvider import providedBy [as 別名]
def listFilteredActionsFor(self, object=None):
""" List all actions available to the user.
"""
actions = []
# Include actions from specific tools.
for provider_name in self.listActionProviders():
provider = getattr(self, provider_name)
if IActionProvider.providedBy(provider):
actions.extend( provider.listActionInfos(object=object) )
# Include actions from object.
if object is not None:
if IActionProvider.providedBy(object):
actions.extend( object.listActionInfos(object=object) )
# Reorganize the actions by category.
filtered_actions={'user':[],
'folder':[],
'object':[],
'global':[],
'workflow':[],
}
for action in actions:
catlist = filtered_actions.setdefault(action['category'], [])
catlist.append(action)
return filtered_actions
示例2: _extractOldstyleActions
# 需要導入模塊: from Products.CMFCore.interfaces import IActionProvider [as 別名]
# 或者: from Products.CMFCore.interfaces.IActionProvider import providedBy [as 別名]
def _extractOldstyleActions(self, provider_id):
# BBB: for CMF 1.6 profiles
fragment = self._doc.createDocumentFragment()
provider = getToolByName(self.context, provider_id)
if not (IActionProvider.providedBy(provider) or
z2IActionProvider.isImplementedBy(provider)):
return fragment
if provider_id == 'portal_actions':
actions = provider._actions
else:
actions = provider.listActions()
if actions and isinstance(actions[0], dict):
return fragment
for ai in actions:
mapping = ai.getMapping()
child = self._doc.createElement('action')
child.setAttribute('action_id', mapping['id'])
child.setAttribute('category', mapping['category'])
child.setAttribute('condition_expr', mapping['condition'])
child.setAttribute('title', mapping['title'])
child.setAttribute('url_expr', mapping['action'])
child.setAttribute('visible', str(mapping['visible']))
for permission in mapping['permissions']:
sub = self._doc.createElement('permission')
sub.appendChild(self._doc.createTextNode(permission))
child.appendChild(sub)
fragment.appendChild(child)
return fragment
示例3: _extractConfiglets
# 需要導入模塊: from Products.CMFCore.interfaces import IActionProvider [as 別名]
# 或者: from Products.CMFCore.interfaces.IActionProvider import providedBy [as 別名]
def _extractConfiglets(self):
fragment = self._doc.createDocumentFragment()
provider = self.context
if not IActionProvider.providedBy(provider):
return fragment
actions = provider.listActions()
if actions and isinstance(actions[0], dict):
return fragment
if actions:
actions = list(actions)
actions.sort(key=lambda action: action.getMapping()['id'])
for ai in actions:
mapping = ai.getMapping()
child = self._doc.createElement('configlet')
child.setAttribute('action_id', mapping['id'])
child.setAttribute('category', mapping['category'])
child.setAttribute('condition_expr', mapping['condition'])
child.setAttribute('title', mapping['title'])
child.setAttribute('url_expr', mapping['action'])
child.setAttribute('visible', str(mapping['visible']))
child.setAttribute('appId', ai.getAppId())
child.setAttribute('icon_expr', mapping['icon_expr'])
for permission in mapping['permissions']:
sub = self._doc.createElement('permission')
sub.appendChild(self._doc.createTextNode(permission))
child.appendChild(sub)
fragment.appendChild(child)
return fragment
示例4: cleanupActionProviders
# 需要導入模塊: from Products.CMFCore.interfaces import IActionProvider [as 別名]
# 或者: from Products.CMFCore.interfaces.IActionProvider import providedBy [as 別名]
def cleanupActionProviders(context):
"""Remove no longer existing action proiders."""
at = getToolByName(context, "portal_actions")
for provider in at.listActionProviders():
candidate = getToolByName(context, provider, None)
if candidate is None or not IActionProvider.providedBy(candidate):
at.deleteActionProvider(provider)
logger.info("%s is no longer an action provider" % provider)
示例5: listFilteredActionsFor
# 需要導入模塊: from Products.CMFCore.interfaces import IActionProvider [as 別名]
# 或者: from Products.CMFCore.interfaces.IActionProvider import providedBy [as 別名]
def listFilteredActionsFor(self, object=None,
ignore_providers=(),
ignore_categories=None):
""" List all actions available to the user.
"""
actions = []
providers = [name for name in self.listActionProviders()
if name not in ignore_providers]
# Include actions from specific tools.
for provider_name in providers:
provider = getattr(self, provider_name, None)
# Skip missing action providers.
if provider is None:
continue
if IActionProvider.providedBy(provider):
if provider_name == 'portal_actions':
actions.extend(provider.listActionInfos(
object=object,
ignore_categories=ignore_categories
))
else:
actions.extend(provider.listActionInfos(object=object))
# Include actions from object.
if object is not None:
if IActionProvider.providedBy(object):
actions.extend(object.listActionInfos(object=object))
# Reorganize the actions by category.
filtered_actions = {'user': [],
'folder': [],
'object': [],
'global': [],
'workflow': [],
}
for action in actions:
catlist = filtered_actions.setdefault(action['category'], [])
catlist.append(action)
return filtered_actions
示例6: hidePropertiesAction
# 需要導入模塊: from Products.CMFCore.interfaces import IActionProvider [as 別名]
# 或者: from Products.CMFCore.interfaces.IActionProvider import providedBy [as 別名]
def hidePropertiesAction(portal, out):
tt = getToolByName(portal, "portal_types", None)
if not IActionProvider.providedBy(tt):
return
for ti in tt.listTypeInfo():
actions = ti.listActions()
index = [i for i in range(len(actions)) if actions[i].category == "object" and actions[i].id == "metadata"]
if index:
ti.deleteActions(index)
out.append("Removed properties action from type %s" % ti.id)
示例7: getMenuItems
# 需要導入模塊: from Products.CMFCore.interfaces import IActionProvider [as 別名]
# 或者: from Products.CMFCore.interfaces.IActionProvider import providedBy [as 別名]
def getMenuItems(self, context, request):
# get standard factory types
factories = super(FactoriesMenu, self).getMenuItems(context, request)
# get factory actions from 'portal_types' action provider
type_actions = []
actions_tool = getToolByName(aq_inner(context), 'portal_actions')
provider = getattr(actions_tool, 'portal_types', None)
if IActionProvider.providedBy(provider):
# Get folder_factories of container.
context_state = getMultiAdapter((context, request),
name='plone_context_state')
if context_state.is_structural_folder():
container = context
else:
container = context_state.folder()
type_actions = provider.listActionInfos(object=container,
category='folder_factories')
if type_actions:
# WARNING: use of portal_actionicons is deprecated!
plone_utils = getToolByName(context, 'plone_utils')
portal_state = getMultiAdapter((context, request),
name='plone_portal_state')
portal_url = portal_state.portal_url()
for action in type_actions:
if action['allowed']:
cssClass = 'actionicon-folder_factories-%s' % action['id']
icon = action['icon']
if not icon:
icon = plone_utils.getIconFor('folder_factories',
action['id'],
None)
if icon:
icon = '%s/%s' % (portal_url, icon)
factories.append({
'title': action['title'],
'description': '',
'action': action['url'],
'selected': False,
'icon': icon,
'extra': {'id': action['id'],
'separator': None,
'class': cssClass},
'submenu': None,
})
# order the actions
factories.sort(key=lambda x: translate(x.get('title', u''),
domain='plone',
context=request))
return self._post_cleanup_factories(context, request, factories)
示例8: listFilteredActionsFor
# 需要導入模塊: from Products.CMFCore.interfaces import IActionProvider [as 別名]
# 或者: from Products.CMFCore.interfaces.IActionProvider import providedBy [as 別名]
def listFilteredActionsFor(self, object=None):
""" List all actions available to the user.
This patch removes inclusion of actions from the object itself.
It was never used and now, it breaks objects inside Types Tool.
It also checks for a new ERP5-only actions API (getActionListFor), but
this API should be moved to listActionInfos() of each tool so as not to
create duplicate code paths that are sources of bugs.
Finally, this patch detects tools that are no longer action providers and
invokes the migration of their actions to portal_actions
"""
actions = []
# Include actions from specific tools.
for provider_name in self.listActionProviders():
provider = getattr(self, provider_name)
if hasattr(provider, 'getActionListFor'):
from Products.ERP5Type.Utils import createExpressionContext
ec = createExpressionContext(object)
actions.extend(action.cook(ec)
for action in provider.getActionListFor(object)
if action.test(ec))
elif IActionProvider.providedBy(provider):
actions.extend( provider.listActionInfos(object=object) )
else:
# This should only be triggered once
# We're in 2.12 and we need to migrate objects that are no longer
# IActionProviders:
migrateNonProviders(self)
# Recompute from beginning
return self.listFilteredActionsFor(object=object)
actions.sort(key=lambda x:x.get('priority', 0))
# Reorganize the actions by category.
filtered_actions={'user':[],
'folder':[],
'object':[],
'global':[],
'workflow':[],
}
for action in actions:
filtered_actions.setdefault(action['category'], []).append(action)
return filtered_actions
示例9: available
# 需要導入模塊: from Products.CMFCore.interfaces import IActionProvider [as 別名]
# 或者: from Products.CMFCore.interfaces.IActionProvider import providedBy [as 別名]
def available(self):
if self._addingToParent() and not self.context_state.is_default_page():
return False
if len(self._itemsToAdd()) > 0:
return True
if self._showConstrainOptions():
return True
actions_tool = getToolByName(self.context, 'portal_actions')
provider = getattr(actions_tool, 'portal_types', None)
if IActionProvider.providedBy(provider):
type_actions = provider.listActionInfos(object=self.context,
category='folder_factories', max=1)
if len(type_actions) > 0:
return True
return False
示例10: available
# 需要導入模塊: from Products.CMFCore.interfaces import IActionProvider [as 別名]
# 或者: from Products.CMFCore.interfaces.IActionProvider import providedBy [as 別名]
def available(self):
actions_tool = getToolByName(self.context, 'portal_actions')
edit_actions = actions_tool.listActionInfos(object=self.context,
categories=('object_buttons',), max=1)
if len(edit_actions) > 0:
return True
provider = getattr(actions_tool, 'portal_types', None)
if IActionProvider.providedBy(provider):
type_actions = provider.listActionInfos(object=self.context,
category='object_buttons', max=1)
if len(type_actions) > 0:
return True
if self._has_transitions():
return True
return False
示例11: _extractOldstyleActions
# 需要導入模塊: from Products.CMFCore.interfaces import IActionProvider [as 別名]
# 或者: from Products.CMFCore.interfaces.IActionProvider import providedBy [as 別名]
def _extractOldstyleActions(self, provider_id):
# BBB: for CMF 1.6 action settings
# This method collects "old-style" action information and
# formats it for import as "new-style" actions
fragment = self._doc.createDocumentFragment()
provider = getToolByName(self.context, provider_id)
if not IActionProvider.providedBy(provider):
return fragment
if provider_id == 'portal_actions':
actions = provider._actions
else:
actions = provider.listActions()
if actions and isinstance(actions[0], dict):
return fragment
for ai in actions:
if getattr(ai, 'getMapping', None) is None:
continue
mapping = ai.getMapping()
child = self._doc.createElement('action')
child.setAttribute('action_id', mapping['id'])
child.setAttribute('category', mapping['category'])
child.setAttribute('condition_expr', mapping['condition'])
child.setAttribute('title', mapping['title'])
child.setAttribute('url_expr', mapping['action'])
child.setAttribute('visible', str(mapping['visible']))
for permission in mapping['permissions']:
sub = self._doc.createElement('permission')
sub.appendChild(self._doc.createTextNode(permission))
child.appendChild(sub)
fragment.appendChild(child)
return fragment