def isEmptyValue(self, obj, value): '''Returns True if the p_value must be considered as an empty value.''' if not self.isMultilingual(obj): return Field.isEmptyValue(self, obj, value) # For a multilingual value, as soon as a value is not empty for a given # language, the whole value is considered as not being empty. if not value: return True for v in value.itervalues(): if not Field.isEmptyValue(self, obj, v): return return True
def getUnilingualFormattedValue(self, obj, value, showChanges=False, userLanguage=None, language=None): '''If no p_language is specified, this method is called by m_getFormattedValue for getting a non-multilingual value (ie, in most cases). Else, this method returns a formatted value for the p_language-specific part of a multilingual value.''' if Field.isEmptyValue(self, obj, value): return '' res = value if self.isSelect: if isinstance(self.validator, Selection): # Value(s) come from a dynamic vocabulary val = self.validator if self.isMultiValued(): return [val.getText(obj, v, self, language=userLanguage) \ for v in value] else: return val.getText(obj, value, self, language=userLanguage) else: # Value(s) come from a fixed vocabulary whose texts are in # i18n files. _ = obj.translate if self.isMultiValued(): res = [_('%s_list_%s' % (self.labelId, v), \ language=userLanguage) for v in value] else: res = _('%s_list_%s' % (self.labelId, value), \ language=userLanguage) elif (self.format == String.XHTML) and showChanges: # Compute the successive changes that occurred on p_value. res = self.getDiffValue(obj, res, language) # If value starts with a carriage return, add a space; else, it will # be ignored. if isinstance(res, basestring) and \ (res.startswith('\n') or res.startswith('\r\n')): res = ' ' + res return res
def isCompleteValue(self, obj, value): '''Returns True if the p_value must be considered as complete. For a unilingual field, being complete simply means not being empty. For a multilingual field, being complete means that a value is present for every language.''' if not self.isMultilingual(obj): return Field.isCompleteValue(self, obj, value) # As soon as a given language value is empty, the global value is not # complete. if not value: return True for v in value.itervalues(): if Field.isEmptyValue(self, obj, v): return return True
def getUnilingualStorableValue(self, obj, value): isString = isinstance(value, basestring) isEmpty = Field.isEmptyValue(self, obj, value) # Apply transform if required if isString and not isEmpty and (self.transform != 'none'): value = self.applyTransform(value) # Clean XHTML strings if not isEmpty and (self.format == String.XHTML): # When image upload is allowed, ckeditor inserts some "style" attrs # (ie for image size when images are resized). So in this case we # can't remove style-related information. try: value = XhtmlCleaner(keepStyles=False).clean(value) except XhtmlCleaner.Error, e: # Errors while parsing p_value can't prevent the user from # storing it. pass
def isEmptyValue(self, value, obj=None): '''Must p_value be considered as empty?''' if not obj: return Field.isEmptyValue(self, value) if value: return False # If "nochange", the value must not be considered as empty return obj.REQUEST.get('%s_delete' % self.name) != 'nochange'