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()))
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())
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)
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
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)
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:]
def update(self): self.context = ILeadImage(self.context) self.available = True if self.context.image else False
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
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