def getItems(self, contents=None): # needed to circumvent bug :-( self.request.debug = False # transmute request interfaces ifaces = directlyProvidedBy(self.request) directlyProvides(self.request, ICollageBrowserLayer) views = [] if not contents: contents = self.context.folderlistingFolderContents() for context in contents: target = context manager = IDynamicViewManager(context) layout = manager.getLayout() if not layout: layout, title = manager.getDefaultLayout() if ICollageAlias.providedBy(context): target = context.get_target() # if not set, revert to context if target is None: target = context # verify that target is accessible try: getSecurityManager().validate(self, self, target.getId(), target) except Unauthorized: continue # Filter out translation duplicates: # If a non-alias object is translatable, check if its language # is set to the currently selected language or to neutral, # or if it is the canonical version elif isTranslatable(target): language = self.request.get('LANGUAGE','') if target.Language() not in (language, ''): # Discard the object, if it is not the canonical version # or a translation is available in the requested language. if not target.isCanonical() or target.getTranslation(language) in contents: continue # assume that a layout is always available view = getMultiAdapter((target, self.request), name=layout) # store reference to alias if applicable if ICollageAlias.providedBy(context): view.__alias__ = context views.append(view) # restore interfaces directlyProvides(self.request, ifaces) return views
def __call__(self): context = aq_inner(self.context) manager = IDynamicViewManager(context) layout = manager.getLayout() if not layout: layout, title = manager.getDefaultLayout() if ICollageAlias.providedBy(context): context = context.get_target() # if not set, revert to self.context if not context: context = self.context # transmute request interfaces ifaces = directlyProvidedBy(self.request) directlyProvides(self.request, ICollageBrowserLayer) view = getMultiAdapter((context, self.request), name=layout) # restore interfaces directlyProvides(self.request, ifaces) return view.index
def __call__(self): context = aq_inner(self.context) manager = IDynamicViewManager(context) layout = manager.getLayout() if not layout: layout, title = manager.getDefaultLayout() if ICollageAlias.providedBy(context): context = context.get_target() # if not set, revert to self.context if not context: context = self.context # transmute request interfaces ifaces = mark_request(self.context, self.request) view = getMultiAdapter((context, self.request), name=layout) # restore interfaces directlyProvides(self.request, ifaces) return view.index
def getItem(item): """ Return referenced object in case of an alias and the item itself otherwise """ if ICollageAlias.providedBy(item): return item.get_target() else: return item
def getSkins(self, request=None): layout = self.getLayout() skins = [] if layout and request: request.debug = False ifaces = mark_request(self.context, request) target = self.context if ICollageAlias.providedBy(target): target = target.get_target() if not target: target = self.context try: view = getMultiAdapter((target, request), name=layout) skinInterfaces = getattr(view, 'skinInterfaces', ()) except ComponentLookupError: skinInterfaces = () for si in skinInterfaces: for name, utility in getUtilitiesFor(si): skins.append((name, utility.title)) # restore interfaces directlyProvides(request, ifaces) skins.sort(lambda x, y: cmp(x[0], y[0])) return skins
def getLayouts(self): context = self.context request = context.REQUEST if ICollageAlias.providedBy(self.context): target = self.context.get_target() if target is not None: context = target ifaces = mark_request(context, request) sm = getSiteManager() layouts = sm.adapters.lookupAll( required=(providedBy(context), providedBy(request)), provided=Interface ) directlyProvides(request, *ifaces) layouts = [(name, getattr(layout, 'title', name)) for (name, layout) in layouts if isinstance(layout, type) and issubclass(layout, BrowserView) and not getattr(layout, 'hide', False)] layouts.sort(lambda a, b: cmp(a[1], b[1])) return layouts
def should_include(self): utils = getToolByName(self.context, 'plone_utils') for row in self.context.folderlistingFolderContents(): for column in row.folderlistingFolderContents(): for item in column.folderlistingFolderContents(): if ICollageAlias.providedBy(item): item = item.get_target() if IBlogMarker.providedBy(item): # return True return False return False
def should_include(self): utils = getToolByName(self.context, 'plone_utils') for row in self.context.folderlistingFolderContents(): for column in row.folderlistingFolderContents(): for item in column.folderlistingFolderContents(): if ICollageAlias.providedBy(item): item=item.get_target() if IBlogMarker.providedBy(item): # return True return False return False
def getItems(self, contents=None): """Items are a views to render. @param contents: If given fetch the folderListingFolderContents of context. @return: a list of views ready to render. """ # needed to circumvent bug :-( self.request.debug = False # transmute request interfaces ifaces = mark_request(self.context, self.request) views = [] if contents is None: contents = self.getContents() for context in contents: if context is None: continue target = context manager = IDynamicViewManager(context) layout = manager.getLayout() if not layout: layout, title = manager.getDefaultLayout() if ICollageAlias.providedBy(context): target = context.get_target() # if not set, revert to context if target is None: target = context # verify that target is accessible try: getSecurityManager().validate(self, self, target.getId(), target) except Unauthorized: continue # Filter out translation duplicates: # If a non-alias object is translatable, check if its language # is set to the currently selected language or to neutral, # or if it is the canonical version elif isTranslatable(target): language = self.request.get('LANGUAGE','') if target.Language() not in (language, ''): # Discard the object, if it is not the canonical version # or a translation is available in the requested language. if not target.isCanonical() or target.getTranslation(language) in contents: continue # If the target is a translation, get the layout defined on the canonical # object, unless a layout has already been defined on the translation. # Fallback to default layout. if not target.isCanonical(): canmanager = IDynamicViewManager(target.getCanonical()) layout = manager.getLayout() or canmanager.getLayout() or layout # don't assume that a layout is always available; note # that we can't use ``queryMultiAdapter`` because even # this lookup might fail hard try: view = getMultiAdapter((target, self.request), name=layout) except ComponentLookupError: view = getMultiAdapter( (target, self.request), name='error_collage-view-not-found') view.notfoundlayoutname = layout # store reference to alias if applicable if ICollageAlias.providedBy(context): view.__alias__ = context views.append(view) # restore interfaces directlyProvides(self.request, ifaces) return views
def getItems(self, contents=None): """Items are a views to render. @param contents: If given fetch the folderListingFolderContents of context. @return: a list of views ready to render. """ # needed to circumvent bug :-( self.request.debug = False # transmute request interfaces ifaces = mark_request(self.context, self.request) views = [] if contents is None: contents = self.getContents() for context in contents: if context is None: continue target = context manager = IDynamicViewManager(context) layout = manager.getLayout() if not layout: layout, title = manager.getDefaultLayout() if ICollageAlias.providedBy(context): target = context.get_target() # if not set, revert to context if target is None: target = context # verify that target is accessible try: getSecurityManager().validate(self, self, target.getId(), target) except Unauthorized: continue # Filter out translation duplicates: # If a non-alias object is translatable, check if its language # is set to the currently selected language or to neutral, # or if it is the canonical version elif isTranslatable(target): language = self.request.get('LANGUAGE', '') if target.Language() not in (language, ''): # Discard the object, if it is not the canonical version # or a translation is available in the requested language. if (not target.isCanonical() or target.getTranslation(language) in contents): continue # If the target is a translation, get the layout defined on # the canonical object, unless a layout has already been # defined on the translation. # Fallback to default layout. if not target.isCanonical(): canmanager = IDynamicViewManager(target.getCanonical()) layout = (manager.getLayout() or canmanager.getLayout() or layout) # don't assume that a layout is always available; note # that we can't use ``queryMultiAdapter`` because even # this lookup might fail hard try: view = getMultiAdapter((target, self.request), name=layout) except ComponentLookupError: view = getMultiAdapter((target, self.request), name='error_collage-view-not-found') view.notfoundlayoutname = layout # store reference to alias if applicable if ICollageAlias.providedBy(context): view.__alias__ = context views.append(view) # restore interfaces directlyProvides(self.request, ifaces) return views
def getItems(self, contents=None): # needed to circumvent bug :-( self.request.debug = False # transmute request interfaces ifaces = directlyProvidedBy(self.request) directlyProvides(self.request, ICollageBrowserLayer) views = [] if not contents: contents = self.context.folderlistingFolderContents() # make sure the languager passed in via set_language is applied correctly plt = getToolByName(self.context, 'portal_languages') binding = self.request.get('LANGUAGE_TOOL', None) language = self.request.get('set_language', plt.getPreferredLanguage()) if binding and binding.LANGUAGE != language: binding.LANGUAGE = language for context in contents: target = context manager = IDynamicViewManager(context) layout = manager.getLayout() if not layout: layout, title = manager.getDefaultLayout() if ICollageAlias.providedBy(context): target = context.get_target() # if not set, revert to context if target is None: target = context # verify that target is accessible try: getSecurityManager().validate(self, self, target.getId(), target) except Unauthorized: continue # Filter out translation duplicates: # If a non-alias object is translatable, check if its language # is set to the currently selected language or to neutral, # or if it is the canonical version elif isTranslatable(target): language = self.request.get('LANGUAGE', '') if target.Language() not in (language, ''): # Discard the object, if it is not the canonical version # or a translation is available in the requested language. if not target.isCanonical() or target.getTranslation( language) in contents: continue # If the target is a translation, get the layout defined on the canonical # object, unless a layout has already been defined on the translation. # Fallback to default layout. if not target.isCanonical(): canmanager = IDynamicViewManager(target.getCanonical()) layout = manager.getLayout() or canmanager.getLayout( ) or layout # assume that a layout is always available view = getMultiAdapter((target, self.request), name=layout) # store reference to alias if applicable if ICollageAlias.providedBy(context): view.__alias__ = context view._collage_context = self.getCollageContext(self.context) views.append(view) # restore interfaces directlyProvides(self.request, ifaces) return views
def getItems(self, contents=None): # needed to circumvent bug :-( self.request.debug = False # transmute request interfaces ifaces = directlyProvidedBy(self.request) directlyProvides(self.request, ICollageBrowserLayer) views = [] if not contents: contents = self.context.folderlistingFolderContents() # make sure the languager passed in via set_language is applied correctly plt = getToolByName(self.context, 'portal_languages') binding = self.request.get('LANGUAGE_TOOL', None) language = self.request.get('set_language', plt.getPreferredLanguage()) if binding and binding.LANGUAGE != language: binding.LANGUAGE = language for context in contents: target = context manager = IDynamicViewManager(context) layout = manager.getLayout() if not layout: layout, title = manager.getDefaultLayout() if ICollageAlias.providedBy(context): target = context.get_target() # if not set, revert to context if target is None: target = context # verify that target is accessible try: getSecurityManager().validate(self, self, target.getId(), target) except Unauthorized: continue # Filter out translation duplicates: # If a non-alias object is translatable, check if its language # is set to the currently selected language or to neutral, # or if it is the canonical version elif isTranslatable(target): language = self.request.get('LANGUAGE','') if target.Language() not in (language, ''): # Discard the object, if it is not the canonical version # or a translation is available in the requested language. if not target.isCanonical() or target.getTranslation(language) in contents: continue # If the target is a translation, get the layout defined on the canonical # object, unless a layout has already been defined on the translation. # Fallback to default layout. if not target.isCanonical(): canmanager = IDynamicViewManager(target.getCanonical()) layout = manager.getLayout() or canmanager.getLayout() or layout # assume that a layout is always available view = getMultiAdapter((target, self.request), name=layout) # store reference to alias if applicable if ICollageAlias.providedBy(context): view.__alias__ = context view._collage_context = self.getCollageContext(self.context) views.append(view) # restore interfaces directlyProvides(self.request, ifaces) return views