def testIsTranslatable(self): self.layer['portal'].invokeFactory('Document', 'doc', title="Doc") doc = getattr(self.layer['portal'], 'doc') if cu.HAS_LINGUAPLONE: self.failUnless(cu.isTranslatable(doc)) else: self.failIf(cu.isTranslatable(doc)) return
def testIsTranslatable(self): self.loginAsPortalOwner() self.portal.invokeFactory('Document', 'doc', title="Doc") doc = getattr(self.portal, 'doc') if cu.HAS_LINGUAPLONE: self.failUnless(cu.isTranslatable(doc)) else: self.failIf(cu.isTranslatable(doc)) return
def get_target(self): res = self.getRefs(self.getField('target').relationship) if not res: if not isTranslatable(self): return # fall back to canonicals target canonical = self.getCanonical() res = canonical.getRefs(self.getField('target').relationship) if not res: return res = res[0] if isTranslatable(res): lt = api.portal.get_tool('portal_languages') res = res.getTranslation(lt.getPreferredLanguage()) or res return res
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 get_target(self): res = self.getRefs(self.getField("target").relationship) if res: res = res[0] else: res = None if isTranslatable(res): lang = getToolByName(self, "portal_languages").getPreferredLanguage() res = res.getTranslation(lang) or res return res
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