def get_addable_items(self): """ Return menu item entries in a TAL-friendly form. """ context = self.context request = self.request factories_view = getMultiAdapter( (context, request), name='folder_factories', ) include = None addContext = factories_view.add_context() constraints = IConstrainTypes(addContext, None) if constraints is not None: include = constraints.getImmediatelyAddableTypes() results = factories_view.addable_types(include=include) results_with_icons = [] for result in results: result['icon'] = 'menu-item-icon {0}'.format(self.icon('plus')) results_with_icons.append(result) results = results_with_icons constraints = ISelectableConstrainTypes(addContext, None) if constraints is not None: if constraints.canSetConstrainTypes() and \ constraints.getDefaultAddableTypes(): url = '{0}/folder_constraintypes_form'.format( addContext.absolute_url(), ) results.append({ 'title': _(u'folder_add_settings', default=u'Restrictions'), 'description': _( u'title_configure_addable_content_types', default=u'Configure which content types can be ' u'added here', ), 'action': url, 'selected': False, 'icon': 'menu-item-icon {0}'.format(self.icon('cog')), 'id': 'settings', 'extra': { 'id': 'plone-contentmenu-settings', 'separator': None, 'class': '', }, 'submenu': None, }) # Also add a menu item to add items to the default page context_state = getMultiAdapter( (context, request), name='plone_context_state', ) if context_state.is_structural_folder() and \ context_state.is_default_page() and \ self._contentCanBeAdded(context, request): results.append({ 'title': _(u'default_page_folder', default=u'Add item to default page'), 'description': _( u'desc_default_page_folder', default=u'If the default page is also a folder, ' u'add items to it from here.', ), 'action': context.absolute_url() + '/@@folder_factories', 'selected': False, 'icon': 'menu-item-icon {0}'.format(self.icon('cog')), 'id': 'special', 'extra': { 'id': 'plone-contentmenu-add-to-default-page', 'separator': None, 'class': 'pat-plone-modal', }, 'submenu': None, }) return results
def get_workflow_actions(self): """ Return menu item entries in a TAL-friendly form. """ from plone.app.contentmenu import PloneMessageFactory as _ context = self.context request = context.REQUEST try: pkg_resources.get_distribution('Products.CMFPlacefulWorkflow') from Products.CMFPlacefulWorkflow.permissions import ManageWorkflowPolicies # noqa: 501 except pkg_resources.DistributionNotFound: from Products.CMFCore.permissions import ManagePortal as ManageWorkflowPolicies # noqa: 501 results = [] locking_info = queryMultiAdapter( (context, request), name='plone_lock_info', ) if locking_info and locking_info.is_locked_for_current_user(): return [] wf_tool = getToolByName(context, 'portal_workflow') workflowActions = wf_tool.listActionInfos(object=context) for action in workflowActions: if action['category'] != 'workflow': continue cssClass = '' actionUrl = action['url'] if actionUrl == '': actionUrl = '{0}/content_status_modify?workflow_action={1}' actionUrl = actionUrl.format( context.absolute_url(), action['id'], ) cssClass = '' description = '' transition = action.get('transition', None) if transition is not None: description = transition.description if action['allowed']: results.append({ 'title': action['title'], 'description': description, 'action': addTokenToUrl(actionUrl, request), 'selected': False, 'icon': None, 'extra': { 'id': 'workflow-transition-{0}'.format(action['id']), 'separator': None, 'class': cssClass, }, 'submenu': None, }) url = context.absolute_url() pw = getToolByName(context, 'portal_placeful_workflow', None) if pw is not None: if _checkPermission(ManageWorkflowPolicies, context): results.append({ 'title': _(u'workflow_policy', default=u'Policy...'), 'description': '', 'action': url + '/placeful_workflow_configuration', 'selected': False, 'icon': None, 'extra': { 'id': 'workflow-transition-policy', 'separator': None, 'class': '', }, 'submenu': None, }) return results
# -*- coding: utf-8 -*- from collective.sidebar import _ from zope.schema.vocabulary import SimpleTerm from zope.schema.vocabulary import SimpleVocabulary positionTerms = [ SimpleTerm(value=u'left', title=_(u'choice_left', default=u'Left')), SimpleTerm(value=u'right', title=_(u'choice_right', default=u'Right')), ] PositionVocabulary = SimpleVocabulary(positionTerms) fonts = [ SimpleTerm(value=u'Bootstrap', title=u'Bootstrap'), SimpleTerm(value=u'Glyphicons', title=u'Glyphicons'), SimpleTerm(value=u'Fontello', title=u'Fontello'), SimpleTerm(value=u'Font Awesome', title=u'Font Awesome'), SimpleTerm(value=u'Font Awesome Pro', title=u'Font Awesome Pro'), SimpleTerm(value=u'Font Awesome Light', title=u'Font Awesome Light'), SimpleTerm(value=u'Font Awesome Duotone', title=u'Font Awesome Duotone'), ] IconFontVocabulary = SimpleVocabulary(fonts)
class ControlPanelEditForm(RegistryEditForm): schema = IControlPanel schema_prefix = 'collective.sidebar' label = _(u'collective_sidebar_title', default=u'Collective Sidebar')
class IControlPanel(Interface): root_nav = schema.Bool( title=_( u'controlpanel_sidebar_show_root_nav_title', default='Root Level Navigation', ), description=_( u'controlpanel_sidebar_show_root_nav_description', default=(u'When enabled, the sidebar will display ' u'the root level navigation.'), ), required=False, default=False, ) dynamic_navigation = schema.Bool( title=_( u'controlpanel_sidebar_dynamic_navigation_title', default='Enable dynamic Navigation', ), description=_( u'controlpanel_sidebar_dynamic_navigation_description', default=(u'Enable dynamic navigation inside sidebar.'), ), required=False, default=True, ) enable_actions = schema.Bool( title=_( u'controlpanel_sidebar_show_actions_title', default='Show Actions Section', ), description=_( u'controlpanel_sidebar_show_actions_description', default=(u'Show actions section including object ' u'buttons for cut, copy, paste, etc.'), ), required=False, default=True, ) enable_cookies = schema.Bool( title=_( u'controlpanel_sidebar_enable_cookies_title', default='Enable Cookies', ), description=_( u'controlpanel_sidebar_enable_cookies_description', default=u'Enable cookies for sidebar features.', ), required=False, default=True, ) enable_collapse = schema.Bool( title=_( u'controlpanel_sidebar_enable_collapse_title', default='Collapsible Sections', ), description=_( u'controlpanel_sidebar_enable_collapse_description', default=( u'When enabled, the sidebar sections can be collapsed. ' u'This feature is only available when cookies are enabled.'), ), required=False, default=True, ) icon_font = schema.Choice( title=_(u'controlpanel_sidebar_choose_icon_font_title', default=u'Choose Icon Font'), description=_( u'controlpanel_sidebar_choose_icon_font_description', default=( u'When a different icon font is installed, you can tell the ' u'sidebar to use it. For Fontello we assume you have set ' u'\"icon\" as the font prefix. ' u'Note: This does not install the icon font!'), ), vocabulary=IconFontVocabulary, default='Glyphicons', required=True, ) sidebar_position = schema.Choice( title=_( u'controlpanel_sidebar_sidebar_position_title', default='Sidebar Position', ), description=_( u'controlpanel_sidebar_sidebar_position_description', default=u'Display the sidebar on the left or right.', ), vocabulary=PositionVocabulary, required=True, default='left', ) mouse = schema.Bool( title=_( u'controlpanel_mouse_title', default='Mouse activated', ), description=_( u'controlpanel_mouse_description', default=(u'When enabled, the sidebar will be opened by mouse.'), ), required=False, default=True, ) mouse_area = schema.Int( title=_( u'controlpanel_mouse_area_title', default='Mouse Activation Area', ), description=_( u'controlpanel_mouse_area_description', default=(u'Enter the number of pixels to activate the sidebar.'), ), required=False, default=30, )
class IControlPanel(Interface): root_nav = schema.Bool( title=_( u'controlpanel_sidebar_show_root_nav_title', default='Root Level Navigation', ), description=_( u'controlpanel_sidebar_show_root_nav_description', default=(u'When enabled, the sidebar will display ' u'the root level navigation.'), ), required=False, default=False, ) enable_actions = schema.Bool( title=_( u'controlpanel_sidebar_show_actions_title', default='Show Actions Section', ), description=_( u'controlpanel_sidebar_show_actions_description', default=(u'Show actions section including object ' u'buttons for cut, copy, paste, etc.'), ), required=False, default=True, ) enable_cookies = schema.Bool( title=_( u'controlpanel_sidebar_enable_cookies_title', default='Enable Cookies', ), description=_( u'controlpanel_sidebar_enable_cookies_description', default=u'Enable cookies for sidebar features.', ), required=False, default=False, ) enable_collapse = schema.Bool( title=_( u'controlpanel_sidebar_enable_collapse_title', default='Collapsible Sections', ), description=_( u'controlpanel_sidebar_enable_collapse_description', default=( u'When enabled, the sidebar sections can be collapsed. ' u'This feature is only available when cookies are enabled.'), ), required=False, default=False, ) icon_font = schema.Choice( title=_(u'controlpanel_sidebar_choose_icon_font_title', default=u'Choose Icon Font'), description=_( u'controlpanel_sidebar_choose_icon_font_description', default=( u'When a different icon font is installed, you can tell the ' u'sidebar to use it. For Fontello we assume you\'ve set ' u'\"icon\" as the font prefix. ' u'Note: This does not install the icon font!')), values=( 'Glyphicons', 'Fontello', 'Font Awesome', 'Font Awesome Pro', 'Font Awesome Light', 'Font Awesome Duotone', ), default='Glyphicons', required=True) sidebar_position = schema.Choice( title=_( u'controlpanel_sidebar_sidebar_position_title', default='Sidebar Position', ), description=_( u'controlpanel_sidebar_sidebar_position_description', default=u'Display the sidebar on the left or right.', ), vocabulary=positionVocabulary, required=True, default='left', )