def can_enable_direct_access(self): """ Helper method used by the actions to know if they should be displayed or not """ context = self._get_real_context() sm = getSecurityManager() if not sm.checkPermission("Portlets: Manage portlets", context): return False depth = len(context.getPhysicalPath()[2:]) if depth >= 3 and not IDirectAccess.providedBy(context): return True else: return False
def _menuitem(self, item, tabindex, first=False, last=False, menu_level=0): classes = [] if first: classes.append('firstItem') if last: classes.append('lastItem') if item['currentParent']: classes.append('navTreeItemInPath') brain = item['item'] if type(brain) == VirtualCatalogBrain: # translate our portal_actions and use their id instead of the # url title = translate(brain.Title, context=self.request) desc = translate(brain.Description, context=self.request) url = brain.url.strip(self.context.portal_url()) item_id = brain.id else: title = safe_unicode(brain.Title) desc = safe_unicode(brain.Description) url = brain.getPath() item_id = brain.getURL()[len(self.site_url):] item_id = item_id.strip('/').replace('/', '-') children = item['children'] """ plone (portal root) | `-- 1: Commune (*) (Not generated by this script) `-- 2: Services communaux (0) (Parent of the Direct Access) `-- 3: Finances (1) (Direct access, Parent of the fourth level) `-- 4: Tata (2) (Fourth level) """ if self.mobile: direct_access_level = 1 fourth_menu_level = 2 else: # Level of PARENT of the level showing the Direct access direct_access_level = 0 # Level of PARENT of the fourth level fourth_menu_level = 1 if menu_level == direct_access_level: queryDict = {} queryDict['path'] = {'query': url, 'depth': 10} queryDict['object_provides'] = 'cpskin.menu.interfaces.IDirectAccess' catalog = getToolByName(self.context, 'portal_catalog') direct_access_catalog = catalog(queryDict) direct_access = [] normal_children = [] for child in children: normal_children.append(child) for element in direct_access_catalog: direct_access.append({'item': element, 'depth': 1, 'children': [], 'currentParent': False, 'currentItem': False}) if direct_access: submenu_render = self._submenu( normal_children, tabindex, menu_level=menu_level + 1, menu_classnames='has_direct_access', close_button=False) or u"" submenu_render += self._submenu( direct_access, tabindex, menu_level=menu_level + 1, menu_classnames='direct_access', close_button=True, direct_access=True) or u"" else: submenu_render = self._submenu( children, tabindex, menu_level=menu_level + 1, menu_classnames='no_direct_access', close_button=True) or u"" elif menu_level == fourth_menu_level: if IDirectAccess.providedBy(item['item'].getObject()): submenu_render = u"" else: helper_view = getMultiAdapter((item['item'].getObject(), self.request), name=u'multilevel-navigation') if helper_view.is_enabled: submenu_render = self._submenu( children, tabindex, menu_level=menu_level + 1, close_button=True) or u"" else: submenu_render = u"" else: submenu_render = self._submenu( children, tabindex, menu_level=menu_level + 1, close_button=True) or u"" return self._menu_item % dict( menu_id=self.menu_id, id=item_id, tabindex=tabindex, level=menu_level, title=self.html_escape(title), description=self.html_escape(desc), url=item['item'].getURL(), classnames=len(classes) and u' class="%s"' % (" ".join(classes)) or u"", selected=item['currentItem'] and u' class="selected"' or u"", submenu=submenu_render)
def is_enabled(self): context = self._get_real_context() return IDirectAccess.providedBy(context)