def breadcrumbs(self): context = aq_inner(self.context) request = self.request if hasattr(context, 'route') and context.route.breadcrumbFactory: return context.route.breadcrumbFactory(context, request) # XXX this is the main part here: # to up 2 parents since the current context # is wrapped if IWrappedContext.providedBy(context): container = utils.parent(utils.parent(context)) elif IFragmentContext.providedBy(context): container = getSite() name, item_url = get_view_url(context) view = getMultiAdapter((container, request), name='breadcrumbs_view') base = tuple(view.breadcrumbs()) if base: item_url = '%s/%s' % (base[-1]['absolute_url'], name) base += ({'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context)},) return base
def reindex_filetype(obj, event): """ Reindex datatable and dataset parents filetype index on DataFile change """ parent = utils.parent(obj) if IDatatable.providedBy(parent): parent.reindexObject(idxs=['filetype']) parent = utils.parent(parent) if IDataset.providedBy(parent): parent.reindexObject(idxs=['filetype'])
def _copyDocument(self, target_folder_obj, source_brain): """ Copy utility """ # TODO: transferLog fuellen und DB Eintraege loeschen # print source_brain.getId source_obj = source_brain.getObject() # determine parent folder for copy p = parent(source_obj) # if source_obj.getId() == 'ifinprojection.2012-08-08.4378013443': # p._delOb('ifinprojection.2012-08-08.4378013443') # return cb_copy_data = p.manage_copyObjects(source_obj.getId()) result = target_folder_obj.manage_pasteObjects(cb_copy_data) # Now do some repairs if len(result) == 1: new_id = result[0]['new_id'] copied_obj = target_folder_obj._getOb(new_id) mdate = source_obj.modified() copied_obj.scenarios = [] wf_state = source_brain.review_state wftool = getToolByName(self, 'portal_workflow') # print wf_state, wftool.getInfoFor(copied_obj, 'review_state') if wf_state == "published" and wftool.getInfoFor(copied_obj, 'review_state') != 'published': wftool.doActionFor(copied_obj, 'publish') copied_obj.setModificationDate(mdate) events = source_obj.doc_extension(TRANSFERS_APP).transferEvents() copied_obj.transferLog = str(events) copied_obj.reindexObject() copied_obj.reindexObjectSecurity() else: log("Could not archive %s" % source_obj.absolute_url())
def breadcrumbs(self): """Shows publications and their volumes and issues as plain text (without a link) if the user has no permission to view them.""" context = aq_inner(self.context) pm = getToolByName(self.context, 'portal_membership') user = pm.getAuthenticatedMember() if IVolume.providedBy(context) or IIssue.providedBy(context): pub = IParentGetter(context).get_parent_object_of_type( "Publication") if user.has_permission('View', pub): return super(RecensioNavigationBreadcrumbs, self).breadcrumbs() elif user.has_permission('View', context): return super(RecensioNavigationBreadcrumbs, self).breadcrumbs() request = self.request container = utils.parent(context) view = getMultiAdapter( (container, request), name='breadcrumbs_view') base = tuple(view.breadcrumbs()) base += ({'absolute_url': '', 'Title': utils.pretty_title_or_id(context, context), }, ) return base
def breadcrumbs(self): context = aq_inner(self.context) request = self.request container = utils.parent(context) name, item_url = get_view_url(context) if container is None: return ({ 'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context), }, ) view = getMultiAdapter((container, request), name='breadcrumbs_view') base = tuple(view.breadcrumbs()) # Some things want to be hidden from the breadcrumbs if IHideFromBreadcrumbs.providedBy(context): return base if base: item_url = '%s/%s' % (base[-1]['absolute_url'], name) rootPath = getNavigationRoot(context) itemPath = '/'.join(context.getPhysicalPath()) # don't show default pages in breadcrumbs or pages above the navigation # root if not utils.isDefaultPage(context, request) \ and not rootPath.startswith(itemPath): base += ({ 'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context), }, ) return base
def navigationTreeRootPath(self): context = aq_inner(self.context) portal_properties = getToolByName(context, 'portal_properties') navtree_properties = getattr(portal_properties, 'navtree_properties') currentFolderOnlyInNavtree = navtree_properties.getProperty('currentFolderOnlyInNavtree', False) if currentFolderOnlyInNavtree: if context.restrictedTraverse('@@plone').isStructuralFolder(): return '/'.join(context.getPhysicalPath()) else: return '/'.join(utils.parent(context).getPhysicalPath()) rootPath = getNavigationRoot(context) # Adjust for topLevel topLevel = navtree_properties.getProperty('topLevel', None) if topLevel is not None and topLevel > 0: contextPath = '/'.join(context.getPhysicalPath()) if not contextPath.startswith(rootPath): return None contextSubPathElements = contextPath[len(rootPath)+1:].split('/') if len(contextSubPathElements) < topLevel: return None rootPath = rootPath + '/' + '/'.join(contextSubPathElements[:topLevel]) return rootPath
def _purgeDocument(self, source_brain): """ Delete utility """ from docpool.elan.config import ELAN_APP from docpool.elan.behaviors.elandocument import IELANDocument source_obj = source_brain.getObject() # determine parent folder for copy scns = None try: scns = IELANDocument(source_obj).scenarios except: # Object could have lost its ELAN behavior but that means we can potentially delete it scns = ['dummy'] if len(scns) == 1: # only the one scenario --> potential delete # Check for other applications than ELAN apps = ILocalBehaviorSupport(source_obj).local_behaviors if apps and len(apps) > 1: # There are others --> only remove ELAN behavior try: apps.remove(ELAN_APP) ILocalBehaviorSupport(source_obj).local_behaviors = list(set(apps)) except Exception, e: log_exc(e) else: # we delete p = parent(source_obj) p.manage_delObjects([source_obj.getId()])
def breadcrumbs(self): context = aq_inner(self.context) request = self.request container = utils.parent(context) try: name, item_url = get_view_url(context) except AttributeError: print context raise if container is None: return ({'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context), },) view = getMultiAdapter((container, request), name='breadcrumbs_view') base = tuple(view.breadcrumbs()) # Some things want to be hidden from the breadcrumbs if IHideFromBreadcrumbs.providedBy(context): return base rootPath = getNavigationRoot(context) itemPath = '/'.join(context.getPhysicalPath()) # don't show default pages in breadcrumbs or pages above the navigation root if not utils.isDefaultPage(context, request) and not rootPath.startswith(itemPath): base += ({'absolute_url': _checkPermission('View', context) and item_url or None, 'Title': utils.pretty_title_or_id(context, context), },) return base
def breadcrumbs(self): context = aq_inner(self.context) request = self.request container = utils.parent(context) name, item_url = get_view_url(context) if container is None: return ({'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context), }, ) view = getMultiAdapter((container, request), name='breadcrumbs_view') base = tuple(view.breadcrumbs()) # Some things want to be hidden from the breadcrumbs if IHideFromBreadcrumbs.providedBy(context): return base if base: item_url = '%s/%s' % (base[-1]['absolute_url'], name) rootPath = getNavigationRoot(context) itemPath = '/'.join(context.getPhysicalPath()) # don't show default pages in breadcrumbs or pages above the navigation root if not utils.isDefaultPage(context, request) and not rootPath.startswith(itemPath): base += ({'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context), }, ) return base
def __call__(self): factories_menu = getUtility(IBrowserMenu, name='plone_contentmenu_factory', context=self.context).getMenuItems( self.context, self.request) factories = [] for item in factories_menu: if item.get('title') == 'folder_add_settings': continue title = item.get('title', '') factories.append({ 'id': item.get('id'), 'title': title and translate(title, context=self.request) or '', # noqa 'action': item.get('action') }) context = aq_inner(self.context) crumbs = [] top_site = get_top_site_from_url(self.context, self.request) while not context == top_site: crumbs.append({ 'id': context.getId(), 'title': utils.pretty_title_or_id(context, context) }) context = utils.parent(context) catalog = getToolByName(self.context, 'portal_catalog') try: brains = catalog(UID=IUUID(self.context)) except TypeError: brains = [] item = None if len(brains) > 0: obj = brains[0] # context here should be site root base_path = '/'.join(context.getPhysicalPath()) item = {} for attr in self.attributes: key = attr if key == 'path': attr = 'getPath' val = getattr(obj, attr, None) if callable(val): val = val() if key == 'path': val = val[len(base_path):] item[key] = val self.request.response.setHeader('Content-Type', 'application/json; charset=utf-8') return json_dumps({ 'addButtons': factories, 'defaultPage': self.context.getDefaultPage(), 'breadcrumbs': [c for c in reversed(crumbs)], 'object': item })
def sourceTitle(obj, **kwargs): """ Get source for catalog index """ if not IRSSNewsItem.providedBy(obj): raise AttributeError found = False myparent = parent(obj) for _back in range(0, 5): if IRSSServer.providedBy(myparent): found = True break myparent = parent(myparent) if not found: raise AttributeError return myparent.title_or_id()
def getNextChildSite(context, portal): """Returns the nearest parent object implementing IChildSite. Code borrowed from plone.app.layout.navigation.root.getNavigationRootObject """ obj = context while not IChildSite.providedBy(obj) and\ aq_base(obj) is not aq_base(portal): obj = utils.parent(obj) return obj
def breadcrumbs(self): real_context = aq_inner(self.context) request_path = self.request.get('PATH_INFO', '') if 'VirtualHostBase' in request_path: path = ('',) + re.search(r'VirtualHostBase/\w+/.*?/(.*?)/VirtualHostRoot/(.*)', request_path).groups() request_path = '/'.join(path) context_path = '/'.join(real_context.getPhysicalPath()) if request_path == context_path: context = real_context else: self.context.plone_log(request_path) parent_path = request_path[:request_path.rfind('/')] self.context.plone_log(parent_path) context = self.context.restrictedTraverse(parent_path) request = self.request container = utils.parent(context) name, item_url = get_view_url(context) if container is None: return ( {'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context), }, ) view = getMultiAdapter((container, request), name='breadcrumbs_view') base = tuple(view.breadcrumbs()) # Some things want to be hidden from the breadcrumbs if IHideFromBreadcrumbs.providedBy(context): return base if base: item_url = '%s/%s' % (base[-1]['absolute_url'], name) rootPath = getNavigationRoot(context) itemPath = '/'.join(context.getPhysicalPath()) # don't show default pages in breadcrumbs or pages above the navigation # root if not utils.isDefaultPage(context, request) \ and not rootPath.startswith(itemPath): base += ({'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context), }, ) if request_path != context_path: name, item_url = get_view_url(real_context) base += ({'absolute_url': item_url, 'Title': utils.pretty_title_or_id(real_context, real_context), }, ) return base return True
def getNavigationRootObject(context, portal): if context is None: return None obj = context while (not INavigationRoot.providedBy(obj) and aq_base(obj) is not aq_base(portal)): obj = utils.parent(obj) return obj
def __call__(self): factories_menu = getUtility( IBrowserMenu, name='plone_contentmenu_factory', context=self.context).getMenuItems(self.context, self.request) factories = [] for item in factories_menu: if item.get('title') == 'folder_add_settings': continue title = item.get('title', '') factories.append({ 'id': item.get('id'), 'title': title and translate(title, context=self.request) or '', # noqa 'action': item.get('action') }) context = aq_inner(self.context) crumbs = [] top_site = get_top_site_from_url(self.context, self.request) while not context == top_site: crumbs.append({ 'id': context.getId(), 'title': utils.pretty_title_or_id(context, context) }) context = utils.parent(context) catalog = getToolByName(self.context, 'portal_catalog') try: brains = catalog(UID=IUUID(self.context)) except TypeError: brains = [] item = None if len(brains) > 0: obj = brains[0] # context here should be site root base_path = '/'.join(context.getPhysicalPath()) item = {} for attr in self.attributes: key = attr if key == 'path': attr = 'getPath' val = getattr(obj, attr, None) if callable(val): val = val() if key == 'path': val = val[len(base_path):] item[key] = val self.request.response.setHeader( 'Content-Type', 'application/json; charset=utf-8' ) return json_dumps({ 'addButtons': factories, 'defaultPage': self.context.getDefaultPage(), 'breadcrumbs': [c for c in reversed(crumbs)], 'object': item })
def navigationRootUrl(self): """ Root URL """ ntool = getToolByName(self.context, 'portal_navigationmanager') parent = utils.parent(ntool) portal_state = getMultiAdapter((parent, self.request), name=u'plone_portal_state') return portal_state.navigation_root_url()
def navigationRootUrl(self): """ Root URL """ ntool = getToolByName(self.context, 'portal_navigationmanager') parent = utils.parent(ntool) portal_state = getMultiAdapter( (parent, self.request), name=u'plone_portal_state') return portal_state.navigation_root_url()
def getNextChildSite(context, portal): """Returns the nearest parent object implementing IChildSite. Code borrowed from plone.app.layout.navigation.root.getNavigationRootObject """ obj = context while not IChildSite.providedBy(obj) and aq_base(obj) is not aq_base(portal): obj = utils.parent(obj) if obj is None: return return obj
def getEbook(self): """ Retrieve the Ebook """ obj = self.context portal_url = getToolByName(obj, 'portal_url') portal = portal_url.getPortalObject() while not IImportedBook.providedBy(obj) \ and aq_base(obj) is not aq_base(portal): obj = utils.parent(obj) return obj
def migrate(self): f = parent(self) if hasattr(self, '_setPortalTypeName'): self._setPortalTypeName("DPTransfers") myid = self.getId() del f[myid] self.__class__ = DPTransferFolder f[myid] = self logger.info(self.__class__) logger.info(self.getPortalTypeName())
def __call__(self): portal_url = getToolByName(self.context, 'portal_url') portal = portal_url.getPortalObject() obj = self.context while not (INavigationRoot.providedBy(obj) and aq_base(obj) is not aq_base(portal)): obj = utils.parent(obj) return self.portlets(obj)
def disabled(self): context = self.context if self.context_state.is_default_page(): context = utils.parent(context) if not getattr(context, 'isPrincipiaFolderish', False): return False elif 'index_html' not in context.objectIds(): return False else: return True
def _findNavRoots(self, navroot, portal): """Find all the nav roots going up the tree """ navroot_ids = [] while True: if navroot.meta_type == 'Plone Site': break navroot_ids.append(navroot.getId()) navroot = getNavigationRootObject(utils.parent(navroot), portal) navroot_ids.reverse() return navroot_ids
def getApplicationRoot(obj): """ Application Root """ portal_url = getToolByName(obj, 'portal_url') portal = portal_url.getPortalObject() while not INavigationRoot.providedBy(obj) and ( aq_base(obj) is not aq_base(portal)): obj = utils.parent(obj) return obj
def getApplicationRoot(obj): """ Returns root of application for given object """ portal_url = getToolByName(obj, 'portal_url') portal = portal_url.getPortalObject() while not IEEAWebApplication.providedBy(obj) and aq_base(obj) \ is not aq_base(portal): obj = utils.parent(obj) return obj
def disabled(self): # As we don't have the view we need to parse the url to see # if its folder_contents context = self.context if self.context_state.is_default_page(): context = utils.parent(context) if not getattr(context, 'isPrincipiaFolderish', False): return False elif 'index_html' not in context.objectIds(): return False else: return True
def __init__(self, context): self.context = context annotations = IAnnotations(context.getCanonical()) mapping = annotations.get(KEY) if mapping is None: mapping = annotations[KEY] = PersistentDict({'locations': []}) self.mapping = mapping self.is_external = False if isDefaultPage(context, context.REQUEST): self.url = parent(context).absolute_url() else: self.url = context.absolute_url()
def migrate(self): request = self.REQUEST alsoProvides(request, IDisableCSRFProtection) f = parent(self) if hasattr(self, '_setPortalTypeName'): self._setPortalTypeName("DPEvent") myid = self.getId() del f[myid] self.__class__ = DPEvent f[myid] = self logger.info(self.__class__) logger.info(self.getPortalTypeName())
def disabled(self): if IContentsPage.providedBy(self.request): return True context = self.context if self.context_state.is_default_page(): context = utils.parent(context) if not getattr(context, 'isPrincipiaFolderish', False): return False elif 'index_html' not in context.objectIds(): return False else: return True
def disabled(self): if IContentsPage.providedBy(self.request): return True context = self.context if self.context_state.is_default_page(): context = utils.parent(context) if not getattr(context, 'isPrincipiaFolderish', False): return False elif 'index_html' not in context: return False else: return True
def __call__(self): factories_menu = getUtility(IBrowserMenu, name="plone_contentmenu_factory", context=self.context).getMenuItems( self.context, self.request ) factories = [] for item in factories_menu: if item.get("title") == "folder_add_settings": continue title = item.get("title", "") factories.append( { "id": item.get("id"), "title": title and translate(title, context=self.request) or "", "action": item.get("action"), } ) context = aq_inner(self.context) crumbs = [] while not IPloneSiteRoot.providedBy(context): crumbs.append({"id": context.getId(), "title": utils.pretty_title_or_id(context, context)}) context = utils.parent(context) catalog = getToolByName(self.context, "portal_catalog") try: brains = catalog(UID=IUUID(self.context)) except TypeError: brains = [] item = None if len(brains) > 0: obj = brains[0] # context here should be site root base_path = "/".join(context.getPhysicalPath()) item = {} for attr in self.attributes: key = attr if key == "path": attr = "getPath" val = getattr(obj, attr, None) if callable(val): val = val() if key == "path": val = val[len(base_path) :] item[key] = val return json_dumps( { "addButtons": factories, "defaultPage": self.context.getDefaultPage(), "breadcrumbs": [c for c in reversed(crumbs)], "object": item, } )
def _getFoldersToRoot(self): """ Return the root of our application. """ portal_url = getToolByName(self.context, 'portal_url') portal = portal_url.getPortalObject() obj = self.context folders = [] while not IEEAWebApplication.providedBy(obj) and aq_base(obj) \ is not aq_base(portal): folders.append(obj.getId()) obj = putils.parent(obj) folders.reverse() return folders
def navigation_root_url(self): """ Override navigation root to portal url """ parent = aq_inner(self.context) plt = getToolByName(parent, 'portal_languages') while not ISiteRoot.providedBy(parent): parent = utils.parent(parent) lang = "" if plt.getPreferredLanguage() != "en": lang = plt.getPreferredLanguage() return parent.absolute_url() + "/" + lang
def ban_for_message(obj, event): portal = api.portal.get() portal_url = portal.absolute_url() domain = urlparse(portal_url).netloc if domain.startswith("www."): domain = domain[4:] headers = {"Host": domain} ban_url = portal_url container = parent(obj) if container.portal_type != "MessagesConfig": # we are on a local banner, ban only its container path ban_url = container.absolute_url() requests.request("BAN", ban_url, headers=headers)
def breadcrumbs(self): context = aq_inner(self.context) view_utils = Utils(self.context, self.request) crumbs = [] while context is not None: if ISiteRoot.providedBy(context): break try: if utils.isDefaultPage(context, self.request): context = utils.parent(context) continue except AttributeError: break # Some things want to be hidden from the breadcrumbs if IHideFromBreadcrumbs.providedBy(context): context = utils.parent(context) continue item_url = view_utils.get_object_url(context) try: state = api.content.get_state(obj=context) except WorkflowException: state = None label = getattr(context, 'navigation_label', None) if not label: label = utils.pretty_title_or_id(context, context) crumbs.append({ 'absolute_url': item_url, 'Title': label, 'state': state }) context = utils.parent(context) return list(reversed(crumbs))
def _getRoot(self): """ Returns root of submenu. """ if not putils.base_hasattr(self, '_root'): portal_url = getToolByName(self.context, 'portal_url') portal = portal_url.getPortalObject() obj = self.context while aq_base(obj) is not aq_base(portal): parent = putils.parent(obj) if IEEAWebApplication.providedBy(parent): break obj = parent self._root = [obj] return self._root[0]
def breadcrumbs(self): context = aq_inner(self.context) request = self.request # XXX this is the main part here: # to up 2 parents since the current context # is wrapped container = utils.parent(utils.parent(context)) try: name, item_url = get_view_url(context) except AttributeError: print context raise view = getMultiAdapter((container, request), name='breadcrumbs_view') base = tuple(view.breadcrumbs()) if base: item_url = '%s/%s' % (base[-1]['absolute_url'], name) base += ({'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context)},) return base
def disabled(self): if IContentsPage.providedBy(self.request): return True context = self.context if self.context_state.is_default_page(): context = utils.parent(context) if not getattr(context, 'isPrincipiaFolderish', False): return False # By default an index_html signals disabled Display Menu, we don't want # that, so we return False, not disabled, by default elif 'index_html' in context: return False else: return False
def __call__(self): factories_menu = getUtility(IBrowserMenu, name='plone_contentmenu_factory', context=self.context).getMenuItems( self.context, self.request) factories_menu = [ m for m in factories_menu if m.get('title') != 'folder_add_settings' ] context = aq_inner(self.context) crumbs = [] while not IPloneSiteRoot.providedBy(context): crumbs.append({ 'id': context.getId(), 'title': utils.pretty_title_or_id(context, context) }) context = utils.parent(context) catalog = getToolByName(self.context, 'portal_catalog') try: brains = catalog(UID=IUUID(self.context)) except TypeError: brains = [] item = None if len(brains) > 0: obj = brains[0] # context here should be site root base_path = '/'.join(context.getPhysicalPath()) item = {} for attr in self.attributes: key = attr if key == 'path': attr = 'getPath' val = getattr(obj, attr, None) if callable(val): if attr in _safe_callable_metadata: val = val() else: continue if key == 'path': val = val[len(base_path):] item[key] = val return json.dumps({ 'addButtons': factories_menu, 'defaultPage': self.context.getDefaultPage(), 'breadcrumbs': [c for c in reversed(crumbs)], 'object': item })
def getSubsiteRoot(context, relativeRoot=None): """Get the path to the root of the navigation tree. If context or one of its parents until (but not including) the portal root implements ISubsiteEnhanced, return this. Otherwise, if an explicit root is set in navtree_properties or given as relativeRoot, use this. If the property is not set or is set to '/', use the portal root. """ portal_url = getToolByName(context, 'portal_url') if not relativeRoot: portal_properties = getToolByName(context, 'portal_properties') navtree_properties = getattr(portal_properties, 'navtree_properties') relativeRoot = navtree_properties.getProperty('root', None) portal = portal_url.getPortalObject() obj = context while (not ISubsiteEnhanced.providedBy(obj) and aq_base(obj) is not aq_base(portal)): # XXX a bit ugly: if this method is called with a context from inside # the portal_factory, we cannot use the parent() method, as it calls # aq_parent on aq_inner of the object. This directly returns the main # portal if IFactoryTool.providedBy(obj): obj = aq_parent(obj) else: obj = utils.parent(obj) if (ISubsiteEnhanced.providedBy(obj) and aq_base(obj) is not aq_base(portal)): return '/'.join(obj.getPhysicalPath()) rootPath = relativeRoot portalPath = portal_url.getPortalPath() # contextPath = '/'.join(context.getPhysicalPath()) if rootPath: if rootPath == '/': return portalPath else: if len(rootPath) > 1 and rootPath[0] == '/': return portalPath + rootPath else: return portalPath # Fall back on the portal root if not rootPath: return portalPath
def getMenuItems(self, obj, request): """Return menu item entries in a TAL-friendly form.""" context_state = getMultiAdapter((obj, request), name='plone_context_state') isDefaultPage = context_state.is_default_page() parent = None folder = None context = None # If this is a default page, also get menu items relative to the parent if isDefaultPage: parent = utils.parent(obj) folder = ISelectableBrowserDefault(parent, None) context = ISelectableBrowserDefault(obj, None) folderResults = self._getMenuItemsForContext(folder, request) contextResults = [] if isDefaultPage or context_state.is_structural_folder(): contextResults = self._getMenuItemsForContext(context, request) results = [] if len(folderResults) > 0 and len(contextResults) > 0: results.append({ 'title' : _(u'label_current_folder_add', default=u'Add in Folder'), 'description' : '', 'action' : None, 'selected' : False, 'icon' : None, 'extra' : {'id': 'folderHeader', 'separator': 'actionSeparator', 'class': ''}, 'submenu' : None, }) results.extend(folderResults) results.append({ 'title' : _(u'label_current_item_add', default=u'Add in Item'), 'description' : '', 'action' : None, 'selected' : False, 'icon' : None, 'extra' : {'id': 'contextHeader', 'separator': 'actionSeparator', 'class': ''}, 'submenu' : None, }) results.extend(contextResults) else: results.extend(folderResults) results.extend(contextResults) return results
def disabled(self): # As we don't have the view we need to parse the url to see # if its folder_contents if 'folder_contents' in self.request.getURL().split('/'): return True if IContentsPage.providedBy(self.request): return True context = self.context if self.context_state.is_default_page(): context = utils.parent(context) if not getattr(context, 'isPrincipiaFolderish', False): return False elif 'index_html' not in context.objectIds(): return False else: return True
def available(self): if self.disabled(): return False isDefaultPage = self.context_state.is_default_page() folder = None context = None folderLayouts = [] contextLayouts = [] # If this is a default page, also get menu items relative to the parent if isDefaultPage: folder = ISelectableBrowserDefault(utils.parent(self.context), None) context = ISelectableBrowserDefault(self.context, None) folderLayouts = [] folderCanSetLayout = False folderCanSetDefaultPage = False if folder is not None: folderLayouts = folder.getAvailableLayouts() folderCanSetLayout = folder.canSetLayout() folderCanSetDefaultPage = folder.canSetDefaultPage() contextLayouts = [] contextCanSetLayout = False contextCanSetDefaultPage = False if context is not None: contextLayouts = context.getAvailableLayouts() contextCanSetLayout = context.canSetLayout() contextCanSetDefaultPage = context.canSetDefaultPage() # Show the menu if we either can set a default-page, or we have more # than one layout to choose from. if (folderCanSetDefaultPage) or \ (folderCanSetLayout and len(folderLayouts) > 1) or \ (folder is None and contextCanSetDefaultPage) or \ (contextCanSetLayout and len(contextLayouts) > 1): return True else: return False
def getInterfaceRoot(context, interface): """Climb up the folder hierarchy and find an object that implements ISearchRoot """ portal_url = getToolByName(context, 'portal_url') portal = portal_url.getPortalObject() object = context while not interface.providedBy(object) and \ aq_base(object) is not aq_base(portal): object = utils.parent(object) if interface.providedBy(object) and \ aq_base(object) is not aq_base(portal): return object else: return aq_base(portal)
def breadcrumbs(self): context = aq_inner(self.context) request = self.request container = utils.parent(context) name, item_url = get_view_url(context) if container is None: return ( {'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context), }, ) view = getMultiAdapter((container, request), name='breadcrumbs_view') base = tuple(view.breadcrumbs()) # Some things want to be hidden from the breadcrumbs if IHideFromBreadcrumbs.providedBy(context): return base if base: if container.portal_type == "Scheda" and utils.isDefaultPage(container, request): # if the parent is a Scheda and is set as default page, it # doesn't appears in the breadcrums, so we need to use context # absolute_url instead simple concatenation item_url = context.absolute_url() else: item_url = '%s/%s' % (base[-1]['absolute_url'], name) rootPath = getNavigationRoot(context) itemPath = '/'.join(context.getPhysicalPath()) # don't show default pages in breadcrumbs or pages above the navigation # root if not utils.isDefaultPage(context, request) \ and not rootPath.startswith(itemPath): base += ( {'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context), }, ) return base
def breadcrumbs(self): path = self.request.get('path') portal = self.navigation_root if path is None: context = portal else: context = portal.restrictedTraverse(unquote(path)) crumbs = [] context = aq_inner(context) while context is not None: if not IHideFromBreadcrumbs.providedBy(context): crumbs.append({ 'path': "/".join(context.getPhysicalPath()), 'url': context.absolute_url(), 'title': context.title_or_id() }) if INavigationRoot.providedBy(context): break context = utils.parent(context) crumbs.reverse() return crumbs
def breadcrumbs(self): """ Breadcrumbs """ if ISiteRoot.providedBy(self.context): return () context = aq_inner(self.context) request = self.request container = utils.parent(context) try: name, item_url = get_view_url(context) except AttributeError: print context raise if container is None: return ({ 'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context), }, ) view = getMultiAdapter((container, request), name='breadcrumbs_view') base = tuple(view.breadcrumbs()) # Some things want to be hidden from the breadcrumbs if IHideFromBreadcrumbs.providedBy(context): return base if base: item_url = '%s/%s' % (base[-1]['absolute_url'], name) # don't show default pages in breadcrumbs if not utils.isDefaultPage(context, request): base += ({ 'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context), }, ) return base
def breadcrumbs(self): context = aq_inner(self.context) request = self.request ct = getToolByName(context, 'portal_catalog') query = {} # Check to see if the current page is a folder default view, if so # get breadcrumbs from the parent folder if utils.isDefaultPage(context, request): currentPath = '/'.join(utils.parent(context).getPhysicalPath()) else: currentPath = '/'.join(context.getPhysicalPath()) query['path'] = {'query': currentPath, 'navtree': 1, 'depth': 0} rawresult = ct(**query) # Sort items on path length dec_result = [(len(r.getPath()), r) for r in rawresult] dec_result.sort() rootPath = getNavigationRoot(context) # Build result dict result = [] for r_tuple in dec_result: item = r_tuple[1] # Don't include it if it would be above the navigation root itemPath = item.getPath() if rootPath.startswith(itemPath): continue id, item_url = get_view_url(item) data = { 'Title': utils.pretty_title_or_id(context, item), 'absolute_url': item_url } result.append(data) return result