Example #1
0
 def contentBody(self):
     context = aq_inner(self.context)
     if ISelectableBrowserDefault.providedBy(context):
         layout = context.getLayout()
     else:
         portal_types = getMultiAdapter((context, self.request),
                                        name=u'plone_tools').types()
         type_info = portal_types.getTypeInfo(context)
         try:
             view_action = type_info.getActionInfo('object/view')
             layout = (view_action['url'].split('/')[-1] or
                       getattr(type_info, 'default_view', 'view'))
         except:
             logger.error("No layout available for %s", context.absolute_url())
             # We can't have a layout
             return False
     return context.restrictedTraverse(layout).macros.get('main', False)
Example #2
0
 def contentBody(self):
     context = aq_inner(self.context)
     if ISelectableBrowserDefault.providedBy(context):
         layout = context.getLayout()
     else:
         portal_types = getMultiAdapter((context, self.request),
                                        name=u'plone_tools').types()
         type_info = portal_types.getTypeInfo(context)
         try:
             view_action = type_info.getActionInfo('object/view')
             layout = (view_action['url'].split('/')[-1]
                       or getattr(type_info, 'default_view', 'view'))
         except:
             logger.error("No layout available for %s",
                          context.absolute_url())
             # We can't have a layout
             return False
     return context.restrictedTraverse(layout).macros.get('main', False)
    def save_images(self, context):
        """Save images from ZODB to temp directory
        """
        portal = getSite()
        portal_url = portal.absolute_url()
        if not portal_url.endswith('/'):
            portal_url += '/'

        portal_path = '/'.join(portal.getPhysicalPath())

        reference_tool = getToolByName(portal, 'reference_catalog')
        mtool = getToolByName(portal, 'portal_membership')
        for filename, image in self.images:
            size = None

            # Traverse methods mess with unicode
            if type(image) is unicode:
                image = str(image)
            path = image.replace(portal_url, '')

            item = None
            # using uid
            if 'resolveuid' in image:
                # uid is the traversed value coming after "resolveuid/"
                resolveuidpath = image.split('/')
                resolveuid_idx = resolveuidpath.index('resolveuid')
                try:
                    uuid = resolveuidpath[resolveuid_idx + 1]
                except IndexError:
                    logger.error("Failed to get image uid from %s", image)
                    continue

                item = reference_tool.lookupObject(uuid)

                if len(resolveuidpath) >= resolveuid_idx + 2:
                    size = resolveuidpath[resolveuid_idx + 2]

                logger.debug("Get image from uid %s", uuid)

            if not item:
                # relative url
                try:
                    item = context.restrictedTraverse(image)
                    logger.debug("Get image from context")
                except Unauthorized:
                    logger.warning("Unauthorized to get image from context path %s", item)
                except:
                    logger.debug("Failed to get image from context path %s",
                                 image)

            if not item:
                # plone.app.imaging
                if '@@images' in path and AnnotationStorage:
                    context_path, images_str, uid_filename = path.rsplit('/', 2)
                    image_context = portal.restrictedTraverse(context_path)
                    uid, ext = uid_filename.rsplit('.', 1)
                    storage = AnnotationStorage(image_context)
                    info = storage.get(uid)
                    if info is not None:
                        request = TestRequest()
                        scale_view = ImageScale(image_context, request, **info)
                        item = scale_view.__of__(image_context)

            if not item:
                # absolute url
                image_path = '/'.join((portal_path, path))
                try:
                    item = portal.restrictedTraverse(image_path)
                    logger.debug("Get image from portal")
                except Unauthorized:
                    logger.warning("Unauthorized to get from context path %s", image_path)
                except:
                    logger.error("Failed to get image from portal path %s",
                                 image_path)
                    continue

            if not mtool.checkPermission('View', item):
                logger.warning("Unauthorized to get image %s", item)
                continue

            if item and size:
                try:
                    item = item.restrictedTraverse(size)
                except Unauthorized:
                    logger.warning("Unauthorized to get size %s from image %s",
                                 size, image)
                except:
                    logger.error("Failed to get size %s from image %s",
                                 size, image)
                    pass

            # Eek, we should put an adapter for various image providers (overkill ?).
            data = get_image_data(item)

            if data:
                _write_file(data, self.fsinfo, filename)
        return
Example #4
0
    def save_images(self, context):
        """Save images from ZODB to temp directory
        """
        portal = getSite()
        portal_url = portal.absolute_url()
        if not portal_url.endswith('/'):
            portal_url += '/'

        portal_path = '/'.join(portal.getPhysicalPath())

        reference_tool = getToolByName(portal, 'reference_catalog')
        mtool = getToolByName(portal, 'portal_membership')
        for filename, image in self.images:
            size = None

            # Traverse methods mess with unicode
            if type(image) is unicode:
                image = str(image)
            path = image.replace(portal_url, '')

            item = None
            # using uid
            if 'resolveuid' in image:
                # uid is the traversed value coming after "resolveuid/"
                resolveuidpath = image.split('/')
                resolveuid_idx = resolveuidpath.index('resolveuid')
                try:
                    uuid = resolveuidpath[resolveuid_idx + 1]
                except IndexError:
                    logger.error("Failed to get image uid from %s", image)
                    continue

                item = reference_tool.lookupObject(uuid)

                if len(resolveuidpath) >= resolveuid_idx + 2:
                    size = resolveuidpath[resolveuid_idx + 2]

                logger.debug("Get image from uid %s", uuid)

            if not item:
                # relative url
                try:
                    item = context.restrictedTraverse(image)
                    logger.debug("Get image from context")
                except Unauthorized:
                    logger.warning(
                        "Unauthorized to get image from context path %s", item)
                except:
                    logger.debug("Failed to get image from context path %s",
                                 image)

            if not item:
                # plone.app.imaging
                if '@@images' in path and AnnotationStorage:
                    context_path, images_str, uid_filename = path.rsplit(
                        '/', 2)
                    image_context = portal.restrictedTraverse(context_path)
                    uid, ext = uid_filename.rsplit('.', 1)
                    storage = AnnotationStorage(image_context)
                    info = storage.get(uid)
                    if info is not None:
                        request = TestRequest()
                        scale_view = ImageScale(image_context, request, **info)
                        item = scale_view.__of__(image_context)

            if not item:
                # absolute url
                image_path = '/'.join((portal_path, path))
                try:
                    item = portal.restrictedTraverse(image_path)
                    logger.debug("Get image from portal")
                except Unauthorized:
                    logger.warning("Unauthorized to get from context path %s",
                                   image_path)
                except:
                    logger.error("Failed to get image from portal path %s",
                                 image_path)
                    continue

            if not mtool.checkPermission('View', item):
                logger.warning("Unauthorized to get image %s", item)
                continue

            if item and size:
                try:
                    item = item.restrictedTraverse(size)
                except Unauthorized:
                    logger.warning("Unauthorized to get size %s from image %s",
                                   size, image)
                except:
                    logger.error("Failed to get size %s from image %s", size,
                                 image)
                    pass

            # Eek, we should put an adapter for various image providers (overkill ?).
            data = get_image_data(item)

            if data:
                _write_file(data, self.fsinfo, filename)
        return