本文整理汇总了Python中Products.CMFCore.interfaces.IActionProvider类的典型用法代码示例。如果您正苦于以下问题:Python IActionProvider类的具体用法?Python IActionProvider怎么用?Python IActionProvider使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了IActionProvider类的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: listFilteredActionsFor
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
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
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
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
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
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
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
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
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
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
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