Exemplo n.º 1
0
def migrate_leadimage(source_object, target_object):
    """ Migrate images added using collective.contentleadimage to the
    ILeadImage-behavior of plone.app.contenttypes if it is enabled.
    """
    OLD_LEADIMAGE_FIELD_NAME = 'leadImage'
    OLD_CAPTION_FIELD_NAME = 'leadImage_caption'
    NEW_LEADIMAGE_FIELD_NAME = 'image'
    NEW_CAPTION_FIELD_NAME = 'image_caption'

    if not source_object.getField(OLD_LEADIMAGE_FIELD_NAME):
        # skip if old content has no field
        return

    if ILeadImage(target_object, None) is None:
        # skip if new content does not have the LeadImage-behavior enabled
        logger.info('Target does not have the behavior "Lead Image" enabled. '
                    'Could not migrate collective.leadimage fields.')
        return

    acc = source_object.getField(OLD_LEADIMAGE_FIELD_NAME).getAccessor(
        source_object)()
    if getattr(acc, 'filename', None) is None:
        # skip if old content has field but has no lead image in the field
        return

    # handle image field
    migrate_imagefield(source_object, target_object, OLD_LEADIMAGE_FIELD_NAME,
                       NEW_LEADIMAGE_FIELD_NAME)

    # handle image caption field
    migrate_simplefield(source_object, target_object, OLD_CAPTION_FIELD_NAME,
                        NEW_CAPTION_FIELD_NAME)
    logger.info('Migrating contentlead image for {0}.'.format(
        target_object.absolute_url()))
Exemplo n.º 2
0
def migrate_leadimage(source_object, target_object):
    """ Migrate images added using collective.contentleadimage to the
    ILeadImage-behavior of plone.app.contenttypes if it is enabled.
    """
    OLD_LEADIMAGE_FIELD_NAME = 'leadImage'
    OLD_CAPTION_FIELD_NAME = 'leadImage_caption'
    NEW_LEADIMAGE_FIELD_NAME = 'image'
    NEW_CAPTION_FIELD_NAME = 'image_caption'

    if not source_object.getField(OLD_LEADIMAGE_FIELD_NAME):
        # skip if old content has no field
        return

    if ILeadImage(target_object, None) is None:
        # skip if new content does not have the LeadImage-behavior enabled
        logger.info("Target does not have the behavior 'Lead Image' enabled. "
                    "Could not migrate collective.leadimage fields.")
        return

    # handle image field
    migrate_imagefield(source_object, target_object, OLD_LEADIMAGE_FIELD_NAME,
                       NEW_LEADIMAGE_FIELD_NAME)

    # handle image caption field
    migrate_simplefield(source_object, target_object, OLD_CAPTION_FIELD_NAME,
                        NEW_CAPTION_FIELD_NAME)
    logger.info("Migrating contentlead image for." %
                target_object.absolute_url())
Exemplo n.º 3
0
 def __call__(self):
     adapted = ILeadImage(self.context, None)
     try:
         if adapted is not None and aq_base(adapted).image is not None:
             self.context = adapted
             self.available = True
     except AttributeError:
         pass
     if self.available:
         tile = self.index()
     else:
         tile = u''
     return u'<html><body>{0:s}</body></html>'.format(tile)
Exemplo n.º 4
0
 def __init__(self, context, feed):
     super().__init__(context, feed)
     self.dexterity = IDexterityContent.providedBy(context)
     lead = ILeadImage(self.context, None)
     if lead:
         if (lead.image and hasattr(lead.image, 'getSize')
                 and lead.image.getSize() > 0):
             self.file = lead.image
             self.field_name = 'image'
     if self.file is None:
         try:
             primary = IPrimaryFieldInfo(self.context, None)
             if (INamedField.providedBy(primary.field)
                     and hasattr(primary.value, 'getSize')
                     and primary.value.getSize() > 0):
                 self.file = primary.value
                 self.field_name = primary.fieldname
         except TypeError:
             pass
Exemplo n.º 5
0
def migrate_leadimage(source_object, target_object):
    """ Migrate images added using collective.contentleadimage to the
    ILeadImage-behavior of plone.app.contenttypes if it is enabled.
    """
    OLD_LEADIMAGE_FIELD_NAME = 'leadImage'
    OLD_CAPTION_FIELD_NAME = 'leadImage_caption'
    NEW_LEADIMAGE_FIELD_NAME = 'image'
    NEW_CAPTION_FIELD_NAME = 'image_caption'

    old_leadimage_field = source_object.getField(OLD_LEADIMAGE_FIELD_NAME)
    if not old_leadimage_field:
        # skip if old content has no field
        return

    if ILeadImage(target_object, None) is None:
        # skip if new content does not have the LeadImage-behavior enabled
        logger.info("Target does not have the behavior 'Lead Image' enabled. "
                    "Could not migrate collective.leadimage fields.")
        return

    old_image = old_leadimage_field.get(source_object)
    if not old_image:
        # skip if image-field is empty
        return

    filename = safe_unicode(old_image.filename)
    old_image_data = old_image.data
    if safe_hasattr(old_image_data, 'data'):
        # handle relstorage
        old_image_data = old_image_data.data

    # construct the new image
    namedblobimage = NamedBlobImage(data=old_image_data, filename=filename)

    # set new field on destination object
    setattr(target_object, NEW_LEADIMAGE_FIELD_NAME, namedblobimage)

    # handle image caption field
    caption_field = source_object.getField(OLD_CAPTION_FIELD_NAME, None)
    if caption_field:
        setattr(target_object, (NEW_CAPTION_FIELD_NAME),
                safe_unicode(caption_field.get(source_object)))
    logger.info("Migrating contentlead image %s" % filename)
Exemplo n.º 6
0
 def query_tile_items(self, context, tile_items, aggregate=True):
     brains = [brain for brain in query_children(context)]
     if not aggregate:
         shuffle(brains)
     for brain in brains:
         if brain.portal_type == 'bda.plone.productshop.productgroup' \
                 or brain.portal_type == 'bda.plone.productshop.product':
             tile_items.append(brain.getObject())
             if not aggregate:
                 return
         elif brain.portal_type == 'Folder':
             obj = brain.getObject()
             if ILeadImage.providedBy(obj) and ILeadImage(obj).image:
                 tile_items.append(obj)
             else:
                 count = len(tile_items)
                 self.query_tile_items(brain.getObject(),
                                       tile_items,
                                       aggregate=False)
                 # case multi level folder structure
                 if len(tile_items) > count + 1:
                     del tile_items[count + 1:]
Exemplo n.º 7
0
 def update(self):
     self.context = ILeadImage(self.context)
     self.available = True if self.context.image else False
Exemplo n.º 8
0
    def images(self):
        rm_behavior = self.behavior

        if not rm_behavior:
            return

        context = aq_inner(self.context)
        imgs = get_related_media(context, portal_type="Image")
        show_caption = rm_behavior.show_titles_as_caption
        first_img_scales = None
        first_img_caption = ""
        further_images = []
        gallery = []

        if len(imgs):
            first_img = imgs[0]
            if first_img:
                first_img_scales = first_img.restrictedTraverse("@@images")
                first_img_caption = first_img.Title()
                further_images = imgs[1:]
        elif rm_behavior.include_leadimage and ILeadImage.providedBy(context):
            # include leadimage if no related images are defined
            first_img_scales = context.restrictedTraverse("@@images")
            first_img_caption = ILeadImage(context).image_caption

        if first_img_scales:
            scale = first_img_scales.scale(
                "image",
                scale=rm_behavior.first_image_scale,
                direction=rm_behavior.first_image_scale_direction
                and "down"
                or "thumbnail",
            )
            if scale:
                large_scale_url = first_img_scales.scale("image", scale="large").url
                gallery.append(
                    dict(
                        url=large_scale_url,
                        tag=scale.tag(
                            title=first_img_caption,
                            alt=first_img_caption,
                            css_class="img-fluid",
                        ),
                        caption=first_img_caption,
                        show_caption=show_caption,
                        title=first_img_caption,
                    )
                )

        for img in further_images:
            if img:
                scales = img.restrictedTraverse("@@images")
                scale = scales.scale(
                    "image",
                    scale=rm_behavior.preview_scale,
                    direction=rm_behavior.preview_scale_direction
                    and "down"
                    or "thumbnail",
                )
                if scale:
                    large_scale_url = scales.scale("image", scale="large").url
                    gallery.append(
                        dict(
                            url=large_scale_url,
                            tag=scale.tag(css_class="img-fluid"),
                            caption=img.Title(),
                            show_caption=show_caption,
                            title=img.Title(),
                        )
                    )

        return gallery
Exemplo n.º 9
0
 def update(self):
     self.context = ILeadImage(self.context)
     self.available = True if self.context.image else False
     if INewsItem.providedBy(self.context):
         self.available = False