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 = self.context request = self.request parent = aq_parent(context) name, item_url = get_view_url(context) if parent is None: return ({'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context), },) view = getMultiAdapter((parent, request), name='breadcrumbs_view') base = tuple(view.breadcrumbs()) # Some things want to be hidden from breadcrumbs if IHideFromBreadcrumbs.providedBy(context): return base if base: item_url = '%s/%s' % (base[-1]['absolute_url'], name) else: item_url = '%s/%s' % (parent.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): 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 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): 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 handle_send(self, action): data, errors = self.extractData() if errors: IStatusMessage(self.request).addStatusMessage( self.formErrorsMessage, type='error') return send_from_address = data.get('send_from_address') send_to_address = data.get('send_to_address') subject = pretty_title_or_id(self, self.context) title = pretty_title_or_id(self, self.context) description = self.context.Description() comment = data.get('comment', None) registry = getUtility(IRegistry) mail_settings = registry.forInterface(IMailSchema, prefix='plone') envelope_from = mail_settings.email_from_address email_from_name = mail_settings.email_from_name try: # Sends a link of a page to someone. host = getUtility(IMailHost) registry = getUtility(IRegistry) encoding = registry.get('plone.email_charset', 'utf-8') if not envelope_from: envelope_from = send_from_address # Cook from template message = self.mail_template(self, send_to_address=send_to_address, send_from_address=send_from_address, comment=comment, subject=subject, title=title, description=description, email_from_name=email_from_name) message = message.encode(encoding) host.send(message, mto=send_to_address, mfrom=envelope_from, subject=subject, charset='utf-8') except ConflictError: raise except Exception as e: # TODO To many things could possibly go wrong. So we catch all. logger.info("Unable to send mail: " + str(e)) IStatusMessage(self.request).addStatusMessage( _('Unable to send mail.'), type='error') return IStatusMessage(self.request).addStatusMessage(_('Mail sent.'), type='info')
def get_menu_items(self, actions=None, category='portal_tabs'): context = aq_inner(self.context) mtool = getToolByName(context, 'portal_membership') member = mtool.getAuthenticatedMember().id portal_properties = getToolByName(context, 'portal_properties') self.navtree_properties = getattr(portal_properties, 'navtree_properties') self.site_properties = getattr(portal_properties, 'site_properties') self.portal_catalog = getToolByName(context, 'portal_catalog') if actions is None: context_state = getMultiAdapter((context, self.request), name=u'plone_context_state') actions = context_state.actions(category) # Build result dict result = [] # first the actions if actions is not None: for actionInfo in actions: data = actionInfo.copy() data['children'] = [] result.append(data) # check whether we only want actions if self.site_properties.getProperty('disable_folder_sections', False): return result query = self._getNavQuery() rawresult = self.portal_catalog.searchResults(query) # now add the content to results idsNotToList = self.navtree_properties.getProperty('idsNotToList', ()) current_path = '/'.join(self.context.getPhysicalPath()) for item in rawresult: if not (item.getId in idsNotToList or item.exclude_from_nav): obj = item.getObject() children = self.get_children(obj, member, 2) id, item_url = (self._get_link_url(item, member) or get_view_url(item)) obj_path = '/'.join(obj.getPhysicalPath()) is_current = is_parent = False if obj_path == current_path: is_current = True elif (current_path.startswith(obj_path + '/') and len(current_path) > len(obj_path)): is_parent = True data = {'title': utils.pretty_title_or_id(context, item), 'id': item.getId, 'url': item_url, 'description': item.Description, 'children': children, 'is_current': is_current, 'is_parent': is_parent} result.append(data) return result
def topLevelTabs(self, actions=None, category='portal_tabs'): context = aq_inner(self.context) mtool = getToolByName(context, 'portal_membership') member = mtool.getAuthenticatedMember().id portal_properties = getToolByName(context, 'portal_properties') self.navtree_properties = getattr(portal_properties, 'navtree_properties') self.site_properties = getattr(portal_properties, 'site_properties') self.portal_catalog = getToolByName(context, 'portal_catalog') if actions is None: context_state = getMultiAdapter((context, self.request), name=u'plone_context_state') actions = context_state.actions(category) # Build result dict result = [] # first the actions if actions is not None: for actionInfo in actions: data = actionInfo.copy() data['name'] = data['title'] result.append(data) # check whether we only want actions if self.site_properties.getProperty('disable_folder_sections', False): return result query = self._getNavQuery() rawresult = self.portal_catalog.searchResults(query) def get_link_url(item): linkremote = item.getRemoteUrl and not member == item.Creator if linkremote: return (get_id(item), item.getRemoteUrl) else: return False # now add the content to results idsNotToList = self.navtree_properties.getProperty('idsNotToList', ()) for item in rawresult: if not (item.getId in idsNotToList or item.exclude_from_nav): id, item_url = get_link_url(item) or get_view_url(item) if item.Type == 'Link': item_oinw = item.open_link_in_new_window else: item_oinw = False data = {'name': utils.pretty_title_or_id(context, item), 'id': item.getId, 'url': item_url, 'description': item.Description, 'review_state': item.review_state, 'oinw': item_oinw} result.append(data) return result
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 author_content(self): results = [] plone_view = self.context.restrictedTraverse( '@@plone' ) brains = self.portal_catalog.searchResults( Creator=self.username, sort_on='created', sort_order='reverse' ) for brain in brains[:10]: results.append({ 'title': pretty_title_or_id( self, brain ), 'date': plone_view.toLocalizedTime( brain.Date ), 'url': brain.getURL() }) return results
def error(self, obj, error): request = getattr(self.context, 'REQUEST', None) if request is not None: title = utils.pretty_title_or_id(obj, obj) message = _(u"Unable to remove ${name} as part of content rule 'delete' action: ${error}", # noqa mapping={'name': title, 'error': error}) IStatusMessage(request).addStatusMessage(message, type="error")
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 update(self): context = aq_inner(self.context) portal_tabs_view = getMultiAdapter((context, self.request), name='portal_tabs_view') portal_tabs = portal_tabs_view.topLevelTabs() self.portal_tabs = portal_tabs[:1] query = {} rootPath = getNavigationRoot(context) query['path'] = {'query' : rootPath, 'depth' : 1} query['portal_type'] = ['SectionFolder', 'AcademicFolder', 'TestimonialFolder'] query['sort_on'] = 'getObjPositionInParent' query['review_state'] = 'published' portal_catalog = getToolByName(context, 'portal_catalog') results = portal_catalog.searchResults(query) for result in results: id, item_url = get_view_url(result) if id not in ['Members',]: data = {'name' : utils.pretty_title_or_id(context, result), 'id' : result.getId, 'url' : item_url, 'description': result.Description} self.portal_tabs.append(data) if len(portal_tabs) > 1: self.portal_tabs.append(portal_tabs[1]) self.selected_tabs = self.selectedTabs(portal_tabs=self.portal_tabs) self.selected_portal_tab = self.selected_tabs['portal']
def topLevelTabs(self, actions=None, category='portal_tabs'): context = aq_inner(self.context) mtool = getToolByName(context, 'portal_membership') member = mtool.getAuthenticatedMember().id portal_properties = getToolByName(context, 'portal_properties') self.navtree_properties = getattr(portal_properties, 'navtree_properties') self.site_properties = getattr(portal_properties, 'site_properties') self.portal_catalog = getToolByName(context, 'portal_catalog') if actions is None: context_state = getMultiAdapter((context, self.request), name=u'plone_context_state') actions = context_state.actions(category) # Build result dict result = [] # first the actions if actions is not None: for actionInfo in actions: data = actionInfo.copy() data['name'] = data['title'] result.append(data) # check whether we only want actions registry = getUtility(IRegistry) navigation_settings = registry.forInterface( INavigationSchema, prefix="plone", check=False ) if not navigation_settings.generate_tabs: return result query = self._getNavQuery() rawresult = self.portal_catalog.searchResults(query) def get_link_url(item): linkremote = item.getRemoteUrl and not member == item.Creator if linkremote: return (get_id(item), item.getRemoteUrl) else: return False # now add the content to results idsNotToList = self.navtree_properties.getProperty('idsNotToList', ()) for item in rawresult: if not (item.getId in idsNotToList or item.exclude_from_nav): id, item_url = get_link_url(item) or get_view_url(item) data = {'name': utils.pretty_title_or_id(context, item), 'id': item.getId, 'url': item_url, 'description': item.Description} result.append(data) return result
def topLevelTabs(self, actions=None, category='portal_tabs'): context = aq_inner(self.context) registry = getUtility(IRegistry) navigation_settings = registry.forInterface( INavigationSchema, prefix="plone", check=False ) mtool = getToolByName(context, 'portal_membership') member = mtool.getAuthenticatedMember().id catalog = getToolByName(context, 'portal_catalog') if actions is None: context_state = getMultiAdapter( (context, self.request), name=u'plone_context_state' ) actions = context_state.actions(category) # Build result dict result = [] # first the actions for actionInfo in actions: data = actionInfo.copy() data['name'] = data['title'] self.customize_entry(data) result.append(data) # check whether we only want actions if not navigation_settings.generate_tabs: return result query = self._getNavQuery() rawresult = catalog.searchResults(query) def _get_url(item): if item.getRemoteUrl and not member == item.Creator: return (get_id(item), item.getRemoteUrl) return get_view_url(item) context_path = '/'.join(context.getPhysicalPath()) # now add the content to results for item in rawresult: if item.exclude_from_nav and not context_path.startswith(item.getPath()): # noqa: E501 # skip excluded items if they're not in our context path continue cid, item_url = _get_url(item) data = { 'name': utils.pretty_title_or_id(context, item), 'id': item.getId, 'url': item_url, 'description': item.Description, 'review_state': item.review_state } self.customize_entry(data, item) result.append(data) return result
def error(self, obj, error): request = getattr(self.context, 'REQUEST', None) if request is not None: title = utils.pretty_title_or_id(obj, obj) message = _(u"Unable to apply local roles on ${name}: ${error}", mapping={'name': title, 'error': error}) IStatusMessage(request).addStatusMessage(message, type="error")
def error(self, obj, error): request = getattr(self.context, 'REQUEST', None) if request is not None: title = utils.pretty_title_or_id(obj, obj) message = _(u"Unable to move ${name} as part of content rule 'move' action: ${error}", mapping={'name': title, 'error': error}) IStatusMessage(request).addStatusMessage(message, type="error")
def topLevelTabs(self, actions=None, category='portal_tabs'): context = aq_inner(self.context) mtool = getToolByName(context, 'portal_membership') member = mtool.getAuthenticatedMember().id portal_properties = getToolByName(context, 'portal_properties') self.navtree_properties = getattr(portal_properties, 'navtree_properties') self.site_properties = getattr(portal_properties, 'site_properties') self.portal_catalog = getToolByName(context, 'portal_catalog') if actions is None: context_state = getMultiAdapter((context, self.request), name=u'plone_context_state') actions = context_state.actions(category) # Build result dict result = [] # first the actions if actions is not None: for actionInfo in actions: data = actionInfo.copy() data['name'] = data['title'] result.append(data) # check whether we only want actions registry = getUtility(IRegistry) navigation_settings = registry.forInterface(INavigationSchema, prefix="plone", check=False) if not navigation_settings.generate_tabs: return result query = self._getNavQuery() rawresult = self.portal_catalog.searchResults(query) def get_link_url(item): linkremote = item.getRemoteUrl and not member == item.Creator if linkremote: return (get_id(item), item.getRemoteUrl) else: return False # now add the content to results idsNotToList = self.navtree_properties.getProperty('idsNotToList', ()) for item in rawresult: if not (item.getId in idsNotToList or item.exclude_from_nav): id, item_url = get_link_url(item) or get_view_url(item) data = { 'name': utils.pretty_title_or_id(context, item), 'id': item.getId, 'url': item_url, 'description': item.Description } result.append(data) return result
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 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 installed = packages_installed() if 'genweb.organs' in installed: if (not utils.isDefaultPage(context, request) or context.portal_type == 'genweb.organs.organsfolder') \ and not rootPath.startswith(itemPath): base += ({ 'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context), }, ) else: 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 topLevelTabs(self, actions=None, category='portal_tabs'): """This method is copy/paste from CatalogNavigationTabs, Only link_target is added on last lines """ context = aq_inner(self.context) mtool = api.portal.get_tool('portal_membership') member = mtool.getAuthenticatedMember().id # noqa portal_properties = api.portal.get_tool('portal_properties') self.navtree_properties = getattr(portal_properties, 'navtree_properties') self.site_properties = getattr(portal_properties, 'site_properties') self.portal_catalog = api.portal.get_tool('portal_catalog') if actions is None: context_state = api.content.get_view( 'plone_context_state', context, self.request) actions = context_state.actions(category) # Build result dict result = [] # first the actions if actions is not None: for actionInfo in actions: data = actionInfo.copy() data['name'] = data['title'] result.append(data) # check whether we only want actions if self.site_properties.getProperty('disable_folder_sections', False): return result query = self._getNavQuery() rawresult = self.portal_catalog.searchResults(query) # noqa def get_link_url(item): linkremote = item.getRemoteUrl and not member == item.Creator if linkremote: return (get_id(item), item.getRemoteUrl) else: return False # now add the content to results idsNotToList = self.navtree_properties.getProperty('idsNotToList', ()) for item in rawresult: if not (item.getId in idsNotToList or item.exclude_from_nav): id, item_url = get_link_url(item) or get_view_url(item) data = {'name': utils.pretty_title_or_id(context, item), 'id': item.getId, 'url': item_url, 'description': item.Description, 'link_target': getattr(item, 'link_target', False)} result.append(data) return result
def getsublevel(self, context, *path): query = {} result = [] raw_path = [] portal_properties = getToolByName(context, 'portal_properties') portal_catalog = getToolByName(context, 'portal_catalog') navtree_properties = getattr(portal_properties, 'navtree_properties') site_properties = getattr(portal_properties, 'site_properties') rootPath = getNavigationRoot(context) raw_path.append(rootPath) for obj in path: raw_path.append(obj) dpath = '/'.join(raw_path) query['path'] = {'query': dpath, 'depth': 1} query['portal_type'] = ['RichDocument', 'Folder', 'GeoLocation'] sortAttribute = navtree_properties.getProperty('sortAttribute', None) if sortAttribute is not None: query['sort_on'] = sortAttribute sortOrder = navtree_properties.getProperty('sortOrder', None) if sortOrder is not None: query['sort_order'] = sortOrder if navtree_properties.getProperty('enable_wf_state_filtering', False): query['review_state'] = navtree_properties.getProperty( 'wf_states_to_show', []) query['is_default_page'] = False if site_properties.getProperty('disable_nonfolderish_sections', False) and len(path) == 1: query['is_folderish'] = False # Get ids not to list and make a dict to make the search fast idsNotToList = navtree_properties.getProperty('idsNotToList', ()) excludedIds = {} for id in idsNotToList: excludedIds[id] = 1 rawresult = portal_catalog.searchResults(**query) # now add the content to results for item in rawresult: if not (excludedIds.has_key(item.getId) or item.exclude_from_nav): id, item_url = get_view_url(item) data = { 'name': utils.pretty_title_or_id(context, item), 'id': item.getId, 'url': item_url, 'description': item.Description } result.append(data) return result
def decoratorFactory(self,node): """Inject any additional keys in the node that are needed and return the new node. """ context = aq_inner(self.context) request = context.REQUEST newNode = node.copy() item = node['item'] portalType = getattr(item, 'portal_type', None) itemUrl = item.getURL() if portalType is not None and portalType in self.viewActionTypes: itemUrl += '/@@ajax_listings' useRemoteUrl = False getRemoteUrl = getattr(item, 'getRemoteUrl', None) isCreator = self.memberId == getattr(item, 'Creator', None) if getRemoteUrl and not isCreator: useRemoteUrl = True isFolderish = getattr(item, 'is_folderish', None) showChildren = False if isFolderish and \ (portalType is None or portalType not in self.parentTypesNQ): showChildren = True layout_view = getMultiAdapter((context, request), name=u'plone_layout') newNode['Title'] = utils.pretty_title_or_id(context, item) newNode['id'] = item.getId newNode['UID'] = item.UID newNode['absolute_url'] = itemUrl newNode['getURL'] = itemUrl newNode['path'] = item.getPath() newNode['Creator'] = getattr(item, 'Creator', None) newNode['creation_date'] = getattr(item, 'CreationDate', None) newNode['portal_type'] = portalType newNode['review_state'] = getattr(item, 'review_state', None) newNode['Description'] = getattr(item, 'Description', None) newNode['show_children'] = showChildren newNode['no_display'] = False # We sort this out with the nodeFilter # BBB getRemoteUrl and link_remote are deprecated, remove in Plone 4 newNode['getRemoteUrl'] = getattr(item, 'getRemoteUrl', None) newNode['useRemoteUrl'] = useRemoteUrl newNode['link_remote'] = ( newNode['getRemoteUrl'] and newNode['Creator'] != self.memberId ) idnormalizer = queryUtility(IIDNormalizer) newNode['normalized_portal_type'] = idnormalizer.normalize(portalType) newNode['normalized_review_state'] = idnormalizer.normalize( newNode['review_state'] ) newNode['normalized_id'] = idnormalizer.normalize(newNode['id']) return newNode
def error(self, obj, error): request = getattr(self.context, 'REQUEST', None) if request is not None: title = utils.safe_unicode(utils.pretty_title_or_id(obj, obj)) error = utils.safe_unicode(error) message = _( u"Unable to change state of ${name} as part of content rule 'workflow' action: ${error}", # noqa mapping={'name': title, 'error': error}) IStatusMessage(request).addStatusMessage(message, type='error')
def getRootTabs(self): """See interface""" context = aq_inner(self.context) portal_catalog = getToolByName(context, 'portal_catalog') portal_properties = getToolByName(context, 'portal_properties') navtree_properties = getattr(portal_properties, 'navtree_properties') # Build result dict result = [] # check whether tabs autogeneration is turned on if not self.isGeneratedTabs(): return result query = {} rootPath = getNavigationRoot(context) query['path'] = {'query' : rootPath, 'depth' : 1} query['portal_type'] = utils.typesToList(context) sortAttribute = navtree_properties.getProperty('sortAttribute', None) if sortAttribute is not None: query['sort_on'] = sortAttribute sortOrder = navtree_properties.getProperty('sortOrder', None) if sortOrder is not None: query['sort_order'] = sortOrder if navtree_properties.getProperty('enable_wf_state_filtering', False): query['review_state'] = navtree_properties.getProperty( 'wf_states_to_show', []) query['is_default_page'] = False if not self.isNotFoldersGenerated(): query['is_folderish'] = True # Get ids not to list and make a dict to make the search fast idsNotToList = navtree_properties.getProperty('idsNotToList', ()) excludedIds = {} for id in idsNotToList: excludedIds[id]=1 rawresult = portal_catalog.searchResults(**query) # now add the content to results for item in rawresult: if not excludedIds.has_key(item.getId): id, item_url = get_view_url(item) data = {'name' : utils.pretty_title_or_id(context, item), 'id' : id, 'url' : item_url, 'description': item.Description, 'exclude_from_nav' : item.exclude_from_nav} result.append(data) return result
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 getsublevel(self, context, *path): query = {} result = [] raw_path = [] portal_properties = getToolByName(context, "portal_properties") portal_catalog = getToolByName(context, "portal_catalog") navtree_properties = getattr(portal_properties, "navtree_properties") site_properties = getattr(portal_properties, "site_properties") rootPath = getNavigationRoot(context) raw_path.append(rootPath) for obj in path: raw_path.append(obj) dpath = "/".join(raw_path) query["path"] = {"query": dpath, "depth": 1} query["portal_type"] = ["RichDocument", "Folder", "GeoLocation"] sortAttribute = navtree_properties.getProperty("sortAttribute", None) if sortAttribute is not None: query["sort_on"] = sortAttribute sortOrder = navtree_properties.getProperty("sortOrder", None) if sortOrder is not None: query["sort_order"] = sortOrder if navtree_properties.getProperty("enable_wf_state_filtering", False): query["review_state"] = navtree_properties.getProperty("wf_states_to_show", []) query["is_default_page"] = False if site_properties.getProperty("disable_nonfolderish_sections", False) and len(path) == 1: query["is_folderish"] = False # Get ids not to list and make a dict to make the search fast idsNotToList = navtree_properties.getProperty("idsNotToList", ()) excludedIds = {} for id in idsNotToList: excludedIds[id] = 1 rawresult = portal_catalog.searchResults(**query) # now add the content to results for item in rawresult: if not (excludedIds.has_key(item.getId) or item.exclude_from_nav): id, item_url = get_view_url(item) data = { "name": utils.pretty_title_or_id(context, item), "id": item.getId, "url": item_url, "description": item.Description, } result.append(data) return result
def error(self, obj, error): request = getattr(self.context, 'REQUEST', None) if request is not None: title = utils.pretty_title_or_id(obj, obj) message = _(u"Unable to apply local roles on ${name}: ${error}", mapping={ 'name': title, 'error': error }) IStatusMessage(request).addStatusMessage(message, type="error")
def __call__(self, REQUEST, RESPONSE): '''Returns a JSON representation of the current object''' result = '' try: context = self.context default_filename = utils.pretty_title_or_id(context, context) + '.pdf' filename = REQUEST.get('filename', default_filename) self.context.setFilename(filename) except Exception, e: result = str(e)
def decoratorFactory(self, node): context = aq_inner(self.context) request = context.REQUEST newNode = node.copy() item = node['item'] portalType = getattr(item, 'portal_type', None) itemUrl = item.getURL() if portalType is not None and portalType in self.viewActionTypes: itemUrl += '/view' useRemoteUrl = False getRemoteUrl = getattr(item, 'getRemoteUrl', None) isCreator = self.memberId == getattr(item, 'Creator', None) if getRemoteUrl and not isCreator: useRemoteUrl = True isFolderish = getattr(item, 'is_folderish', None) showChildren = False if isFolderish and \ (portalType is None or portalType not in self.parentTypesNQ): showChildren = True layout_view = getMultiAdapter((context, request), name=u'plone_layout') newNode['Title'] = utils.pretty_title_or_id(context, item) newNode['id'] = item.getId newNode['UID'] = item.UID newNode['absolute_url'] = itemUrl newNode['getURL'] = itemUrl newNode['path'] = item.getPath() newNode['item_icon'] = layout_view.getIcon(item) newNode['Creator'] = getattr(item, 'Creator', None) newNode['creation_date'] = getattr(item, 'CreationDate', None) newNode['portal_type'] = portalType newNode['review_state'] = getattr(item, 'review_state', None) newNode['Description'] = getattr(item, 'Description', None) newNode['show_children'] = showChildren newNode['no_display'] = False # We sort this out with the nodeFilter # BBB getRemoteUrl and link_remote are deprecated, remove in Plone 4 newNode['getRemoteUrl'] = getattr(item, 'getRemoteUrl', None) newNode['useRemoteUrl'] = useRemoteUrl newNode['link_remote'] = ( newNode['getRemoteUrl'] and newNode['Creator'] != self.memberId ) idnormalizer = queryUtility(IIDNormalizer) newNode['normalized_portal_type'] = idnormalizer.normalize(portalType) newNode['normalized_review_state'] = idnormalizer.normalize( newNode['review_state'] ) newNode['normalized_id'] = idnormalizer.normalize(newNode['id']) return newNode
def topLevelTabs(self, actions=None, category='portal_tabs'): context = aq_inner(self.context) registry = getUtility(IRegistry) navigation_settings = registry.forInterface( INavigationSchema, prefix="plone", check=False ) mtool = getToolByName(context, 'portal_membership') member = mtool.getAuthenticatedMember().id catalog = getToolByName(context, 'portal_catalog') if actions is None: context_state = getMultiAdapter( (context, self.request), name=u'plone_context_state' ) actions = context_state.actions(category) # Build result dict result = [] # first the actions for actionInfo in actions: data = actionInfo.copy() data['name'] = data['title'] result.append(data) # check whether we only want actions if not navigation_settings.generate_tabs: return result query = self._getNavQuery() rawresult = catalog.searchResults(query) def _get_url(item): if item.getRemoteUrl and not member == item.Creator: return (get_id(item), item.getRemoteUrl) return get_view_url(item) # now add the content to results for item in rawresult: if item.exclude_from_nav: continue cid, item_url = _get_url(item) data = { 'name': utils.pretty_title_or_id(context, item), 'id': item.getId, 'url': item_url, 'description': item.Description, 'review_state': item.review_state } result.append(data) return result
def error(self, obj, error): request = getattr(self.context, 'REQUEST', None) if request is not None: title = utils.pretty_title_or_id(obj, obj) message = _( u"Unable to update Apple News article metadata for ${name} as part of content rule: ${error}", # noqa mapping={ 'name': title, 'error': error }) IStatusMessage(request).addStatusMessage(message, type='error')
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), 'ct_class': 'contenttype-{}'.format(context.portal_type) }, ) 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): portal_type = context.portal_type if base_hasattr(context, '_link_portal_type'): portal_type = context._link_portal_type base += ({ 'absolute_url': item_url, 'Title': utils.pretty_title_or_id(context, context), 'ct_class': 'contenttype-{}'.format(portal_type) }, ) 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: 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 error(self, obj, error): request = getattr(self.context, "REQUEST", None) if request is not None: title = utils.pretty_title_or_id(obj, obj) message = _( u"Unable to reindex ${name} as part of content rule 'reindex' action: ${error}", mapping={ "name": title, "error": error }, ) IStatusMessage(request).addStatusMessage(message, type="error")
def getItem(self, item): """get item""" context = aq_inner(self.context) id_, item_url = get_view_url(item) data = { 'name': utils.pretty_title_or_id(context, item), 'id': id_, 'url': item_url, 'description': item.Description, 'exclude_from_nav': item.exclude_from_nav, } return data
def getItem(self, item): """get item""" context = aq_inner(self.context) id_, item_url = get_view_url(item) data = { "name": utils.pretty_title_or_id(context, item), "id": id_, "url": item_url, "description": item.Description, "exclude_from_nav": item.exclude_from_nav, } return data
def error(self, obj_being_processed, error): title = pretty_title_or_id( obj_being_processed, obj_being_processed, ) message = _( u"Unable to set values on %s: %s, %s" % (title, str(type(error)), error), ) logger.error(message) if self.request is not None: IStatusMessage(self.request).addStatusMessage( message, type="error") # noqa: E501
def getTitle(context): try: if hasattr(context, 'hasProperty'): if context.hasProperty('short_breadcrumb'): alt_title = context.getProperty('short_breadcrumb') if alt_title: return alt_title except TypeError: pass return utils.pretty_title_or_id(context, context)
def error(self, obj, error): request = getattr(self.context, 'REQUEST', None) if request is not None: title = utils.safe_unicode(utils.pretty_title_or_id(obj, obj)) error = utils.safe_unicode(error) message = _( u"Unable to change state of ${name} as part of content rule 'workflow' action: ${error}", # noqa mapping={ 'name': title, 'error': error }) IStatusMessage(request).addStatusMessage(message, type='error')
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 __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 getsubtab(self, context, tab): query = {} result = [] portal_properties = getToolByName(context, "portal_properties") portal_catalog = getToolByName(context, "portal_catalog") navtree_properties = getattr(portal_properties, "navtree_properties") site_properties = getattr(portal_properties, "site_properties") rootPath = getNavigationRoot(context) xpath = "/".join([rootPath, tab["id"]]) if "path" in tab: xpath = tab["path"] query["path"] = {"query": xpath, "depth": 1} query["portal_type"] = utils.typesToList(context) sortAttribute = navtree_properties.getProperty("sortAttribute", None) if sortAttribute is not None: query["sort_on"] = sortAttribute sortOrder = navtree_properties.getProperty("sortOrder", None) if sortOrder is not None: query["sort_order"] = sortOrder if navtree_properties.getProperty("enable_wf_state_filtering", False): query["review_state"] = navtree_properties.getProperty("wf_states_to_show", []) # Get ids not to list idsNotToList = navtree_properties.getProperty("idsNotToList", ()) excludedIds = {} for id in idsNotToList: excludedIds[id] = 1 rawresult = portal_catalog.searchResults(**query) # now add the content to results for item in rawresult: if not (excludedIds.has_key(item.getId) or item.exclude_from_nav): id, item_url = get_view_url(item) data = { "name": utils.pretty_title_or_id(context, item), "id": item.getId, "url": item_url, "description": item.Description, "current": "", "path": item.getPath(), } if self.current_url.startswith(item_url): data["current"] = "selected" data["subtabs"] = self.getsubtab(self.context, data) result.append(data) return result
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 __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 decoratorFactory(self, node): """ Monkey patch Plone's navigation tree information to include content media """ context = aq_inner(self.context) request = context.REQUEST newNode = node.copy() item = node['item'] portalType = getattr(item, 'portal_type', None) itemUrl = item.getURL() if portalType is not None and portalType in self.viewActionTypes: itemUrl += '/view' isFolderish = getattr(item, 'is_folderish', None) showChildren = False if isFolderish and (portalType is None or portalType not in self.parentTypesNQ): showChildren = True ploneview = getMultiAdapter((context, request), name=u'plone') newNode['Title'] = utils.pretty_title_or_id(context, item) newNode['id'] = item.getId newNode['absolute_url'] = itemUrl newNode['getURL'] = itemUrl newNode['path'] = item.getPath() newNode['icon'] = getattr(item, 'getIcon', None) # Deprecated, use item_icon newNode['item_icon'] = ploneview.getIcon(item) newNode['Creator'] = getattr(item, 'Creator', None) newNode['creation_date'] = getattr(item, 'CreationDate', None) newNode['portal_type'] = portalType newNode['review_state'] = getattr(item, 'review_state', None) newNode['Description'] = getattr(item, 'Description', None) newNode['getRemoteUrl'] = getattr(item, 'getRemoteUrl', None) newNode['show_children'] = showChildren newNode['no_display'] = False # We sort this out with the nodeFilter newNode['link_remote'] = newNode['getRemoteUrl'] and newNode['Creator'] != self.memberId idnormalizer = queryUtility(IIDNormalizer) newNode['normalized_portal_type'] = idnormalizer.normalize(portalType) newNode['normalized_review_state'] = idnormalizer.normalize(newNode['review_state']) newNode['normalized_id'] = idnormalizer.normalize(newNode['id']) newNode['getContentMedias'] = getattr(item, 'getContentMedias', None) newNode['Language'] = getattr(item, 'Language', "neutral language") return newNode
def getsubtabs(self,context,tab): query={} result=[] portal_properties = getToolByName(context, 'portal_properties') portal_catalog = getToolByName(context, 'portal_catalog') navtree_properties = getattr(portal_properties, 'navtree_properties') site_properties = getattr(portal_properties, 'site_properties') rootPath = getNavigationRoot(context) dpath='/'.join([rootPath,tab['id']]) query['path'] = {'query' : dpath, 'depth' : 1} query['portal_type'] = utils.typesToList(context) sortAttribute = navtree_properties.getProperty('sortAttribute', None) if sortAttribute is not None: query['sort_on'] = sortAttribute sortOrder = navtree_properties.getProperty('sortOrder', None) if sortOrder is not None: query['sort_order'] = sortOrder if navtree_properties.getProperty('enable_wf_state_filtering', False): query['review_state'] = navtree_properties.getProperty('wf_states_to_show', []) query['is_default_page'] = False if site_properties.getProperty('disable_nonfolderish_sections', False): query['is_folderish'] = True # Get ids not to list and make a dict to make the search fast idsNotToList = navtree_properties.getProperty('idsNotToList', ()) excludedIds = {} for id in idsNotToList: excludedIds[id]=1 rawresult = portal_catalog.searchResults(**query) # now add the content to results for item in rawresult: if not (excludedIds.has_key(item.getId) or item.exclude_from_nav): id, item_url = get_view_url(item) data = {'name' : utils.pretty_title_or_id(context, item), 'id' : item.getId, 'url' : item_url, 'description': item.Description} result.append(data) return result
def _formatData(self, item): mtool = getToolByName(self.context, 'portal_membership') member = mtool.getAuthenticatedMember().id def _get_url(item): if item.getRemoteUrl and not member == item.Creator: return (get_id(item), item.getRemoteUrl) return get_view_url(item) cid, item_url = _get_url(item) return { 'name': utils.pretty_title_or_id(self.context, item), 'id': item.getId, 'url': item_url, 'description': item.Description }
def items(self): context = aq_inner(self.context) plone_utils = getToolByName(context, 'plone_utils') items=[] for i, obj in enumerate(self.objects): title_or_id = pretty_title_or_id(plone_utils, obj) items.append(dict(path='/'.join(obj.getPhysicalPath()), obj=obj, id=obj.getId(), title_or_id=safe_unicode(title_or_id), view_url='%s/@@sharing' % obj.absolute_url(), table_row_class= \ (i + 1) % 2 == 0 and "even" or "odd")) return items
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 update(self): self.portal_state = getMultiAdapter((self.context, self.request), name=u'plone_portal_state') catalog = getToolByName(self.context, 'portal_catalog') self.context_state = getMultiAdapter((self.context, self.request), name=u'plone_context_state') #portal_properties = getToolByName(self.context, 'portal_properties') #navtree_properties = getattr(portal_properties, 'navtree_properties') path = [] path_raw = self.context.getPhysicalPath() self.path = [] for obj in path_raw: path.append(obj) parent_path = '/'.join(path) raw_results = catalog.searchResults({ 'path': { 'query': parent_path, 'depth': 0 }, 'is_default_page': False }) for item in raw_results: id, item_url = get_view_url(item) data = { 'name': utils.pretty_title_or_id(self.context, item), 'url': item_url, 'is_last': False, 'is_suitable_view_mode': False } #try: #item.getProperty('default_page') #data['is_suitable_view_mode'] = True #except : #pass if item.getObject().getProperty('default_page') is not None: data['is_suitable_view_mode'] = True self.path.append(data) if len(self.path): self.path[len(self.path) - 1]['is_last'] = True self.root = self.portal_state.navigation_root_url() self.portal_search_url = self.root + '/search' self.current_page_url = self.context_state.current_page_url() self.view_path = True if self.current_page_url.count(self.portal_search_url): self.view_path = False
def breadcrumbs(self): if not INoBarcelonetaLayer.providedBy(self.request): # We are in the CMS, so we want the default. view = getMultiAdapter((self.context, self.request), name='orig_breadcrumbs_view') return tuple(view.breadcrumbs()) context = aq_inner(self.context) context_path = '/'.join(context.getPhysicalPath()) root_path = getNavigationRoot(context) if context_path == root_path: # We are the navigation root. return () # We now iteratively look for a parent and check if this is # the navigation root. chain = aq_chain(context) for index, parent in enumerate(chain): try: parent_path = '/'.join(parent.getPhysicalPath()) except AttributeError: # This is probably the root request object, so we # somehow did not find a suitable parent. return () if parent_path == root_path: # We have found the root. break # The parent is not yet the navigation root, so set the # item and try the next parent in the chain. item = parent # Get the interesting part of the chain. chain = list(reversed(chain[:index])) # Some things want to be hidden from the breadcrumbs. chain = [ elem for elem in chain if not IHideFromBreadcrumbs.providedBy(elem) ] # Restrict to the wanted maximum of levels chain = chain[:self.levels] crumbs = [] for item in chain: crumbs.append({ 'absolute_url': item.absolute_url(), 'Title': utils.pretty_title_or_id(item, item) }) return tuple(crumbs)
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
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 get_items(self): items = list() base_url = self.base_url idnormalizer = getUtility(IIDNormalizer) for item in self.contents: current = True in_path = True id = item.getId normalized_id = idnormalizer.normalize(id) portal_type = getattr(item, 'portal_type', None) review_state = getattr(item, 'review_state', None) normalized_review_state = idnormalizer.normalize(review_state) normalized_portal_type = idnormalizer.normalize(portal_type) context_path = '/'.join(self.context.getPhysicalPath()) item_path = item.getPath() items.append({ 'url': '%s/%s' % (base_url, item.getId), 'description': item.Description, 'title': plone_utils.pretty_title_or_id(self.context, item), 'current': current, 'in_path': in_path, 'normalized_id': normalized_id, 'normalized_review_state': normalized_review_state, 'normalized_portal_type': normalized_portal_type, 'local_content': item_path.startswith(context_path), }) return items
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) return json.dumps({ 'addButtons': factories_menu, 'defaultPage': self.context.getDefaultPage(), 'breadcrumbs': [c for c in reversed(crumbs)] })
def objectTitle(self, obj): context = aq_inner(obj) title = utils.pretty_title_or_id(context, context) return utils.safe_unicode(title)
def pretty_title_or_id(self, obj, empty_value=_marker): # Return the best possible title or id of an item, regardless # of whether obj is a catalog brain or an object, but returning an # empty title marker if the id is not set (i.e. it's auto-generated). return utils.pretty_title_or_id(self, obj, empty_value=empty_value)