Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
    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
Ejemplo n.º 9
0
    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