def location(self): context = self.context location_ref = ILocation(context, None) if not location_ref: return location_uid = location_ref.location_uid location_notes = location_ref.location_notes location = uuidToObject(location_uid) meta_basic = IBasic(location, None) add = IAddress(location, None) location_url = None ret = u'' if meta_basic and add: # I'm a location reference. # Create a link with href, title and urltext. # construct url to location site = getSite() location_url = location.absolute_url() site_path = u'/'.join(site.getPhysicalPath()) location_path = u'/'.join(location.getPhysicalPath()) if site_path not in location_path: # location in different site - cannot directly open it location_url = u'{0}/@@venue_view?uid={1}'.format( site.absolute_url(), location_uid) country = get_pycountry_name(add.country) ret = self._location_link_template.format( # noqa url=location_url, address=join_nonempty( ( add.street, join_nonempty((add.zip_code, add.city), sep=u' '), country, ), sep=u', ', ), title=meta_basic.title, ) ret = safe_unicode(ret) location_notes = safe_unicode(location_notes) ret = join_nonempty([ret, location_notes], u'. ') return ret
def post_creation(self, obj): field_data = self.field_data bdata = ILayoutAware(obj, None) if bdata: bdata.contentLayout = '++contentlayout++default/document.html' bdata = IRichText(obj, None) if bdata: bdata.text = RichTextValue(field_data['text'], 'text/html', 'text/html') bdata = IBasic(obj, None) if bdata: bdata.title = field_data['title'] bdata.description = field_data['description'] else: obj.title = field_data['title'] obj.description = field_data['description'] bdata = ICategorization(obj, None) if bdata: bdata.subjects = field_data['subject'] bdata = IPublication(obj) if field_data['effectiveDate']: bdata.effective = field_data['effectiveDate'].asdatetime() ldata = ILocation(obj, None) if ldata: if field_data.get('location'): ldata.locations = [field_data['location']] if field_data.get('newsLocation'): if ldata.locations: ldata.locations.append(field_data['newsLocation']) else: ldata.locations = [field_data['newsLocation']] obj.modification_date = field_data['modification_date'] obj.creation_date = field_data['creation_date'] bdata = ILayoutAware(obj, None) if bdata: if self.data[ 'portal_type'] == 'Folder' and 'text' in self.field_data: bdata.content = FOLDER_DEFAULT_PAGE_LAYOUT % self.field_data[ 'text'] elif self.layout: bdata.contentLayout = self.layout
def contact(self): if not IOrganizer.providedBy(self.context): return super(VenueICalendarEventComponent, self).contact ref = IOrganizer(self.context) item = uuidToObject(ref.organizer_uid) ret = None if item: basic = IBasic(item, None) retstring = utils.join_nonempty([ basic.title, utils.get_venue_contact_string(item) ], sep=u', ') ret = {'value': retstring} else: ret = {'value': ref.organizer_notes} return ret
def searchable_text_indexer(obj): address = address_idx(obj)() # returns DelegatingIndexer callable meta_basic = IBasic(obj) venue = IVenue(obj) notes = venue.notes and venue.notes.output_relative_to(obj) or u'' if notes: transforms = getToolByName(obj, 'portal_transforms') body_plain = transforms.convertTo( 'text/plain', notes, mimetype='text/html', ).getData().strip() notes = body_plain parts = [ safe_unicode(address), safe_unicode(meta_basic.title), safe_unicode(meta_basic.description), safe_unicode(notes) ] ret = _concat_and_utf8(*parts) return ret
def location(self): if not ILocation.providedBy(self.context): return super(VenueICalendarEventComponent, self).location ref = ILocation(self.context) item = uuidToObject(ref.location_uid) ret = None if item: basic = IBasic(item, None) locationstring = utils.join_nonempty([ basic.title, utils.get_venue_address_string(item) ], sep=u', ') ret = { 'value': locationstring, 'parameters': {'altrep': item.absolute_url()} } else: ret = {'value': ref.location_notes} return ret
def post_creation(self, obj, pdb_if_exception=False, post_creation_data=None): if obj is None: return field_data = self.field_data bdata = ILayoutAware(obj, None) if bdata: try: bdata.contentLayout = self.layout except Exception: bdata.contentLayout = '++contentlayout++default/document.html' bdata = IRichText(obj, None) if bdata: try: bdata.text = RichTextValue(field_data['text'], 'text/html', 'text/html') except Exception: try: bdata.text = RichTextValue( field_data[ 'plone.app.contenttypes.behaviors.richtext.IRichText'] ['text'], # noqa 'text/html', 'text/html').raw except Exception: bdata.text = '' bdata = IBasic(obj, None) if bdata: try: bdata.title = field_data['title'] except Exception: try: bdata.title = field_data[ 'plone.app.content.interfaces.INameFromTitle']['title'] except Exception: bdata.description = field_data[dublin]['title'] try: bdata.description = field_data['description'] except Exception: try: bdata.description = field_data[dublin]['description'] except Exception: bdata.description = field_data[basic]['description'] else: try: obj.title = field_data['title'] obj.description = field_data['description'] except Exception: obj.title = field_data[dublin]['title'] obj.description = field_data[dublin]['description'] bdata = ICategorization(obj, None) if bdata: try: bdata.subjects = field_data['subject'] except Exception: try: bdata.subjects = self.field_data[dublin]['subjects'] except Exception: try: bdata.subjects = self.field_data[categorization][ 'subjects'] except Exception: pass # no keywords found bdata = IPublication(obj) try: if field_data['effectiveDate']: bdata.effective = pydt(field_data['effectiveDate']) except Exception: try: if field_data[dublin]['effective']: bdata.effective = pydt(field_data[dublin]['effective']) except Exception: try: if field_data[publication]['effective']: bdata.effective = pydt( field_data[publication]['effective']) except Exception: bdata.effective = None ldata = ILocation(obj, None) if ldata: if field_data.get('location'): ldata.locations = [field_data['location']] if field_data.get('newsLocation'): if ldata.locations: ldata.locations.append(field_data['newsLocation']) else: ldata.locations = [field_data['newsLocation']] try: obj.modification_date = field_data['modification_date'] except Exception: try: obj.modification_date = obj.modified() except Exception: obj.modification_date = None try: obj.creation_date = field_data['creation_date'] except Exception: try: obj.creation_date = obj.created() except Exception: obj.creation_date = None bdata = IDublinCore(obj, None) if bdata: if IDublinCore.__identifier__ in field_data: dublin_core = field_data[IDublinCore.__identifier__] bdata.expires = dublin_core['expires'] bdata.rights = dublin_core['rights'] bdata.creators = tuple(dublin_core['creators']) bdata.language = dublin_core['language'] bdata.effective = pydt(dublin_core['effective']) bdata.subjects = dublin_core['subjects'] bdata.contributors = tuple(dublin_core['contributors']) else: bdata.expires = pydt(field_data.get('expirationDate')) bdata.rights = field_data.get('rights') creators = field_data.get('creators') bdata.creators = tuple(creators) if creators else () language = field_data.get('language') bdata.language = language if language is not None else "" bdata.effective = pydt(field_data.get('effectiveDate')) bdata.subjects = field_data.get('subject') contributors = field_data.get('contributors') bdata.contributors = tuple(contributors) if contributors else ( ) bdata = ILayoutAware(obj, None) if bdata: if self.data['portal_type'] == 'Folder' and ( self.field_data.get('text') or '').strip(): bdata.content = FOLDER_DEFAULT_PAGE_LAYOUT % self.field_data[ 'text'] # need to explicitly reset contentLayout value because this data # could be overwritten bdata.contentLayout = None elif self.layout: if layoutaware in field_data and 'contentLayout' in field_data[ layoutaware]: bdata.contentLayout = field_data[layoutaware][ 'contentLayout'] if layoutaware in field_data and 'content' in field_data[ layoutaware]: bdata.content = field_data[ 'plone.app.blocks.layoutbehavior.ILayoutAware'][ 'content'] if 'rendered_layout' in self.data['data']: bdata.rendered_layout = self.data['data'][ 'rendered_layout'] inv_field_mapping = {v: k for k, v in self.fields_mapping.iteritems()} for IBehavior, field_name in self.behavior_data_mappers: original_field_name = inv_field_mapping.get(field_name, field_name) if original_field_name not in self.field_data: # data not here... continue behavior = IBehavior(obj, None) if behavior is None: # behavior not valid for obj type continue val = self.field_data[original_field_name] if field_name in self.data_converters: val = self.data_converters[field_name](val) setattr(behavior, field_name, val) # handle lead images for field_name in self.lead_image_field_names: if self.field_data.get(field_name): if field_name == 'plone.app.contenttypes.behaviors.leadimage.ILeadImage': im_obj = self.field_data.get(field_name)['image'] else: im_obj = self.field_data.get(field_name) if hasattr(im_obj, 'read'): im_data = im_obj.read() else: im_data = im_obj if not im_data: continue filename = self.field_data.get('image_filename') if not filename: if hasattr(im_obj, 'filename'): filename = im_obj.filename else: filename = self.field_data['id'] obj.image = im_data if not isinstance(obj.image, NamedBlobImage): is_stringio = isinstance(im_obj, StringIO) if is_stringio: namedblobimage_data = im_data elif isinstance(im_obj, Image): namedblobimage_data = im_data.data else: if pdb_if_exception: pdb.set_trace() logger.info(" lead image is type %s" % type(im_obj)) obj.image = NamedBlobImage(data=namedblobimage_data, contentType='', filename=filename) if hasattr(obj.image, 'contentType') and isinstance( obj.image.contentType, unicode): obj.image.contentType = obj.image.contentType.encode( 'ascii') else: if isinstance(im_obj, Image): data = im_obj.data elif hasattr(im_obj, 'buf'): data = im_obj.buf elif hasattr(im_obj, '_blob'): if hasattr(im_obj._blob, '_p_blob_uncommitted'): f = open(im_obj._blob._p_blob_uncommitted, 'r') data = f.read() f.close() else: raise Exception( "no _p_blob_uncommitted attr in im_obj._blob") else: raise Exception("no _blob attr in im_obj") if data == '' or data is None: data = base64.b64decode( 'R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==' ) image_type = what('', h=data) if image_type in [ 'png', 'bmp', 'jpeg', 'xbm', 'tiff', 'gif' ]: obj.image.contentType = 'image/%s' % image_type elif image_type == 'rast': obj.image.contentType = 'image/cmu-raster' elif image_type == 'ppm': obj.image.contentType = 'image/x-portable-pixmap' elif image_type == 'pgm': obj.image.contentType = 'image/x-portable-greymap' elif image_type == 'pbm': obj.image.contentType = 'image/x-portable-bitmap' elif image_type == 'rgb': obj.image.contentType = 'image/x-rgb' else: # look at filename extension contentType, encoding = guess_type(obj.image.filename, strict=False) if contentType: obj.image.contentType = contentType else: logger.info( "Unknown image type {};" " defaulting to jpeg".format(image_type)) pdb.set_trace() obj.image.contentType = 'image/jpeg' # default for caption_field_name in self.lead_image_caption_field_names: if caption_field_name in self.field_data: obj.imageCaption = self.field_data.get( caption_field_name)
from plone.app.dexterity.behaviors.metadata import IBasic from plone.autoform.interfaces import IFormFieldProvider from plone.dexterity.interfaces import IDexterityContainer from sllintra.content.schema import ArchiveSchema from zope.interface import Interface from zope.interface import alsoProvides # Content type class IArchive(ArchiveSchema, IDexterityContainer): """Interface for content type: sllintra.content.Archive""" # Behavior class INameFromTitleOrFileName(Interface): """Marker interface to enable name from title or filename""" class IBasic(IBasic): """Override plone.app.dexterity.behaviors.metadata.IBasic to make title unrequisite""" IBasic.get('title').required = False alsoProvides(IBasic, IFormFieldProvider)
def migrate_repositoryroot_titles(self, repositoryroot): ITranslatedTitle(repositoryroot).title_de = IBasic( repositoryroot).title repositoryroot.reindexObject()
def migrate_titles(self, obj): ITranslatedTitle(obj).title_de = IBasic(obj).title obj.reindexObject()
def post_creation(self, obj): field_data = self.field_data bdata = ILayoutAware(obj, None) if bdata: bdata.contentLayout = '++contentlayout++default/document.html' bdata = IRichText(obj, None) if bdata: bdata.text = RichTextValue(field_data['text'], 'text/html', 'text/html') bdata = IBasic(obj, None) if bdata: bdata.title = field_data['title'] bdata.description = field_data['description'] else: obj.title = field_data['title'] obj.description = field_data['description'] bdata = ICategorization(obj, None) if bdata: bdata.subjects = field_data['subject'] bdata = IPublication(obj) if field_data['effectiveDate']: bdata.effective = pydt(field_data['effectiveDate']) ldata = ILocation(obj, None) if ldata: if field_data.get('location'): ldata.locations = [field_data['location']] if field_data.get('newsLocation'): if ldata.locations: ldata.locations.append(field_data['newsLocation']) else: ldata.locations = [field_data['newsLocation']] obj.modification_date = field_data['modification_date'] obj.creation_date = field_data['creation_date'] bdata = ILayoutAware(obj, None) if bdata: if self.data[ 'portal_type'] == 'Folder' and 'text' in self.field_data: bdata.content = FOLDER_DEFAULT_PAGE_LAYOUT % self.field_data[ 'text'] # need to explicitly reset contentLayout value because this data # could be overwritten bdata.contentLayout = None elif self.layout: bdata.contentLayout = self.layout inv_field_mapping = {v: k for k, v in self.fields_mapping.iteritems()} for IBehavior, field_name in self.behavior_data_mappers: original_field_name = inv_field_mapping.get(field_name, field_name) if original_field_name not in self.field_data: # data not here... continue behavior = IBehavior(obj, None) if behavior is None: # behavior not valid for obj type continue val = self.field_data[original_field_name] if field_name in self.data_converters: val = self.data_converters[field_name](val) setattr(behavior, field_name, val) # handle lead images for field_name in self.lead_image_field_names: if self.field_data.get(field_name): im_obj = self.field_data.get(field_name) if hasattr(im_obj, 'read'): im_data = im_obj.read() else: im_data = im_obj if not im_data: continue filename = self.field_data.get('image_filename') if not filename: if hasattr(im_obj, 'filename'): filename = im_obj.filename else: filename = self.field_data['id'] obj.image = NamedBlobImage(data=decode_file_data(im_data), filename=to_unicode(filename)) if not obj.image.contentType: obj.image.contentType = 'image/jpeg' for caption_field_name in self.lead_image_caption_field_names: if caption_field_name in self.field_data: obj.imageCaption = self.field_data.get( caption_field_name)