def processForm(self, data=1, metadata=0, REQUEST=None, values=None): """Process the schema looking for data in the form.""" is_new_object = self.checkCreationFlag() BaseObject.processForm(self, data=data, metadata=metadata, REQUEST=REQUEST, values=values) # LP specific bits if config.AUTO_NOTIFY_CANONICAL_UPDATE: if self.isCanonical(): self.invalidateTranslations() # Check if an explicit id has been passed explicit_id = False if REQUEST is None: REQUEST = getattr(self, 'REQUEST', None) if REQUEST is not None: if 'id' in REQUEST.form and REQUEST.form.get('id'): explicit_id = True if values is not None: if 'id' in values and values.get('id'): explicit_id = True if (is_new_object and not explicit_id and self._at_rename_after_creation): # Renames an object like its normalized title self._renameAfterCreation(check_auto_id=True) if shasattr(self, '_lp_default_page'): delattr(self, '_lp_default_page') language = self.Language() parent = aq_parent(aq_inner(self)) if ITranslatable.providedBy(parent) and parent.Language() != '': if not parent.hasTranslation(language): parent.addTranslation(language) translation_parent = parent.getTranslation(language) translation_parent.processForm(values=dict( title=self.Title())) translation_parent.setDescription(self.Description()) parent = translation_parent if ISelectableBrowserDefault.providedBy(parent): parent.setDefaultPage(self.getId()) if shasattr(self, '_lp_outdated'): delattr(self, '_lp_outdated')
def processForm(self, data=1, metadata=0, REQUEST=None, values=None): """Process the schema looking for data in the form.""" is_new_object = self.checkCreationFlag() BaseObject.processForm(self, data=data, metadata=metadata, REQUEST=REQUEST, values=values) # LP specific bits if config.AUTO_NOTIFY_CANONICAL_UPDATE: if self.isCanonical(): self.invalidateTranslations() # Check if an explicit id has been passed explicit_id = False if REQUEST is None: REQUEST = getattr(self, 'REQUEST', None) if REQUEST is not None: if 'id' in REQUEST.form and REQUEST.form.get('id'): explicit_id = True if values is not None: if 'id' in values and values.get('id'): explicit_id = True if (is_new_object and not explicit_id and self._at_rename_after_creation): # Renames an object like its normalized title self._renameAfterCreation(check_auto_id=True) if shasattr(self, '_lp_default_page'): delattr(self, '_lp_default_page') language = self.Language() parent = aq_parent(aq_inner(self)) if ITranslatable.providedBy(parent) and parent.Language() != '': if not parent.hasTranslation(language): parent.addTranslation(language) translation_parent = parent.getTranslation(language) translation_parent.processForm( values=dict(title=self.Title())) translation_parent.setDescription(self.Description()) parent = translation_parent if ISelectableBrowserDefault.providedBy(parent): parent.setDefaultPage(self.getId()) if shasattr(self, '_lp_outdated'): delattr(self, '_lp_outdated')
def processForm(self, data=1, metadata=0, REQUEST=None, values=None): """ Find out what language dependent fields have changed. """ request = REQUEST or self.REQUEST if values: form = values else: form = request.form fieldset = form.get("fieldset", None) schema = self.Schema() schemata = self.Schemata() fields = [] if fieldset is not None: fields = schemata[fieldset].fields() else: if data: fields += schema.filterFields(isMetadata=0) form_keys = form.keys() oldValues = {} for field in fields: if not field.languageIndependent and field.getName() in form_keys: # we have a translatable field in the form # save a hash for old value accessor = field.getAccessor(self) oldValues[field.getName()] = md5(str(accessor())).hexdigest() # START LinguaPlone.I18NBaseObject.processForm method is_new_object = self.checkCreationFlag() BaseObject.processForm(self, data, metadata, REQUEST, values) # # Translation invalidation moved to the end # if self._at_rename_after_creation and is_new_object: new_id = self._renameAfterCreation() else: new_id = self.getId() if shasattr(self, "_lp_default_page"): delattr(self, "_lp_default_page") if not self.isCanonical(): language = self.getLanguage() canonical = self.getCanonical() canonical_parent = aq_parent(aq_inner(canonical)) parent = aq_parent(aq_inner(self)) if parent == canonical_parent and not parent.hasTranslation(language): parent.addTranslation(language) translation_parent = parent.getTranslation(language) values = {"title": self.Title()} translation_parent.processForm(values=values) translation_parent.setDescription(self.Description()) parent = translation_parent if shasattr(parent, "setDefaultPage"): parent.setDefaultPage(new_id) if shasattr(self, "_lp_outdated"): delattr(self, "_lp_outdated") # END - LinguaPlone.I18NBaseObject.processForm method changedFields = [] for fName, md5Hex in oldValues.items(): schema_accessor = schema.getField(fName).getAccessor(self)() if md5Hex != md5(str(schema_accessor)).hexdigest(): # translatable field changed changedFields.append(fName) if config.AUTO_NOTIFY_CANONICAL_UPDATE: comment = "Fields changed: %s" % ",".join(changedFields) if self.isCanonical() and changedFields: self.invalidateTranslations(comment) # mark canonical with the changes but no state change cUpdate = TranslationObjectUpdate(self, self, "nochange", comment=comment) notify(cUpdate)
def processForm(self, data=1, metadata=0, REQUEST=None, values=None): """ Find out what language dependent fields have changed. """ request = REQUEST or self.REQUEST if values: form = values else: form = request.form fieldset = form.get('fieldset', None) schema = self.Schema() schemata = self.Schemata() fields = [] if fieldset is not None: try: fields = schemata[fieldset].fields() except KeyError: if data: fields += schema.filterFields() else: if data: fields += schema.filterFields() form_keys = form.keys() oldValues = {} for field in fields: if not field.languageIndependent and field.getName() in form_keys: # we have a translatable field in the form # save a hash for old value accessor = field.getAccessor(self) try: oldValues[field.getName()] = md5(str(accessor())).hexdigest() except UnicodeEncodeError: oldValues[field.getName()] = md5( str(accessor().encode('utf8'))).hexdigest() translations = getattr(self, 'getTranslations', lambda: '')() has_translations = len(translations) > 1 modified_independent_fields = [] lang_independent_fields_old_values = {} if has_translations: lang_independent_fields = [i for i in fields if i.isLanguageIndependent(i)] for field in lang_independent_fields: fname = field.getName() if fname in form_keys: form_value = form.get(fname) if form_value: accessor = field.getAccessor(self) lang_independent_fields_old_values[field.getName()] = \ md5(str(accessor())).hexdigest() # START LinguaPlone.I18NBaseObject.processForm method is_new_object = self.checkCreationFlag() BaseObject.processForm(self, data, metadata, REQUEST, values) # EEA #71102 reindex translations if languageIndependent fields # are modified as right now as of Plone 4.3.x only the object # being modified is reindexed even though language independent # fields are set on all translations if has_translations: for fName, fValue in lang_independent_fields_old_values.items(): schema_accessor = schema.getField(fName).getAccessor(self)() if fValue != md5(str(schema_accessor)).hexdigest(): modified_independent_fields.append(fName) if modified_independent_fields: for translation in translations: obj = translations[translation][0] if obj.isCanonical(): continue obj.reindexObject() # # Translation invalidation moved to the end # if self._at_rename_after_creation and is_new_object: new_id = self._renameAfterCreation() else: new_id = self.getId() if shasattr(self, '_lp_default_page'): delattr(self, '_lp_default_page') if not self.isCanonical(): language = self.getLanguage() canonical = self.getCanonical() canonical_parent = aq_parent(aq_inner(canonical)) parent = aq_parent(aq_inner(self)) if parent == canonical_parent and \ not parent.hasTranslation(language): parent.addTranslation(language) translation_parent = parent.getTranslation(language) values = {'title': self.Title()} translation_parent.processForm(values=values) translation_parent.setDescription(self.Description()) parent = translation_parent if shasattr(parent, 'setDefaultPage'): parent.setDefaultPage(new_id) if shasattr(self, '_lp_outdated'): delattr(self, '_lp_outdated') # END - LinguaPlone.I18NBaseObject.processForm method changedFields = [] for fName, md5Hex in oldValues.items(): schema_accessor = schema.getField(fName).getAccessor(self)() try: schema_str = str(schema_accessor) except UnicodeEncodeError: schema_str = str(schema_accessor.encode('utf8')) if md5Hex != md5(schema_str).hexdigest(): # translatable field changed changedFields.append(fName) if config.AUTO_NOTIFY_CANONICAL_UPDATE: comment = 'Fields changed: %s' % ','.join(changedFields) if self.isCanonical() and changedFields: self.invalidateTranslations(comment) # mark canonical with the changes but no state change cUpdate = TranslationObjectUpdate(self, self, 'nochange', comment=comment) notify(cUpdate)