def setUpWidgets(self, ignore_request=False): self.set_untranslatable_fields_for_display() #get the translation if available language = self.request.get("language") translation = get_translation_for(self.context, language) if translation: self.is_translation = True else: self.is_translation = False context = copy(removeSecurityProxy(self.context)) for field_translation in translation: setattr(context, field_translation.field_name, field_translation.field_text) self.widgets = formlib.form.setUpEditWidgets( self.form_fields, self.prefix, context, self.request, adapters=self.adapters, ignore_request=ignore_request) if language is not None: widget = self.widgets["language"] try: self.language = language widget.vocabulary = CurrentLanguageVocabulary().__call__(self) widget.vocabulary.getTermByToken(language) except LookupError: raise BadRequest("No such language token: '%s'" % language) # if the term exists in the vocabulary, set the value on # the widget widget.setRenderedValue(language) # for translations, add a ``render_original`` method to each # widget, which will render the display widget bound to the # original (HEAD) document head = self.context form_fields = ui.setUpFields(self.context.__class__, "view") for widget in self.widgets: form_field = form_fields.get(widget.context.__name__) if form_field is None: form_field = formlib.form.Field(widget.context) # bind field to head document field = form_field.field.bind(head) # create custom widget or instantiate widget using # component lookup if form_field.custom_widget is not None: display_widget = form_field.custom_widget(field, self.request) else: display_widget = component.getMultiAdapter( (field, self.request), IDisplayWidget) display_widget.setRenderedValue(field.get(head)) # attach widget as ``render_original`` widget.render_original = display_widget
def setUpWidgets(self, ignore_request=False): self.set_untranslatable_fields_for_display() #get the translation if available language = self.request.get("language") translation = get_translation_for(self.context, language) if translation: self.is_translation = True else: self.is_translation = False context = copy(removeSecurityProxy(self.context)) for field_translation in translation: setattr(context, field_translation.field_name, field_translation.field_text) self.widgets = formlib.form.setUpEditWidgets( self.form_fields, self.prefix, context, self.request, adapters=self.adapters, ignore_request=ignore_request) if language is not None: widget = self.widgets["language"] try: self.language = language widget.vocabulary = CurrentLanguageVocabulary().__call__(self) widget.vocabulary.getTermByToken(language) except LookupError: raise BadRequest("No such language token: '%s'" % language) # if the term exists in the vocabulary, set the value on # the widget widget.setRenderedValue(language) # for translations, add a ``render_original`` method to each # widget, which will render the display widget bound to the # original (HEAD) document head = self.context form_fields = ui.setUpFields(self.context.__class__, "view") for widget in self.widgets: form_field = form_fields.get(widget.context.__name__) if form_field is None: form_field = formlib.form.Field(widget.context) # bind field to head document field = form_field.field.bind(head) # create custom widget or instantiate widget using # component lookup if form_field.custom_widget is not None: display_widget = form_field.custom_widget( field, self.request) else: display_widget = component.getMultiAdapter( (field, self.request), IDisplayWidget) display_widget.setRenderedValue(field.get(head)) # attach widget as ``render_original`` widget.render_original = display_widget
def handle_add_save(self, action, data): """After succesful creation of translation, redirect to the view.""" #url = url.absoluteURL(self.context, self.request) #language = get_language_by_name(data["language"])["name"] session = Session() trusted = removeSecurityProxy(self.context) mapper = rdb.orm.object_mapper(trusted) pk = getattr(trusted, mapper.primary_key[0].name) current_translation = get_translation_for(self.context, data["language"]) if current_translation: for translation in current_translation: session.delete(translation) for form_field in data.keys(): if form_field == "language": continue translation = domain.ObjectTranslation() translation.object_id = pk translation.object_type = trusted.__class__.__name__ translation.field_name = form_field translation.lang = data["language"] translation.field_text = data[form_field] session.add(translation) session.flush() # !+SESSION_CLOSE(taras.sterch, july-2011) there is no need to close the # session. Transaction manager will take care of this. Hope it does not # brake anything. #session.commit() #session.close() # !+EVENT_DRIVEN_CACHE_INVALIDATION(mr, mar-2011) no translate event # invalidate caches for this domain object type invalidate_caches_for(trusted.__class__.__name__, "translate") #versions = IVersioned(self.context) #version = versions.create("'%s' translation added" % language) # reset workflow state #version.status = None #IWorkflowController(version).fireTransition("-draft_translation") # redefine form context and proceed with edit action #self.setUpAdapters(version) #handle_edit_action(self, action, data) # commit version such that it gets a version id #transaction.commit() #if not self._next_url: # self._next_url = ( \ # "%s/versions/%s" % (url, stringKey(version)) + \ # "?portal_status_message=Translation added") self._finished_add = True
def handle_add_save(self, action, data): """After succesful creation of translation, redirect to the view.""" for key in data.keys(): if isinstance(data[key], str): data[key] = unescape(data[key]) #url = url.absoluteURL(self.context, self.request) #language = get_language_by_name(data["language"])["name"] session = Session() trusted = removeSecurityProxy(self.context) mapper = rdb.orm.object_mapper(trusted) pk = getattr(trusted, mapper.primary_key[0].name) current_translation = get_translation_for(self.context, data["language"]) if current_translation: for translation in current_translation: session.delete(translation) for form_field in data.keys(): if form_field == "language": continue translation = domain.ObjectTranslation() translation.object_id = pk translation.object_type = trusted.__class__.__name__ translation.field_name = form_field translation.lang = data["language"] translation.field_text = data[form_field] session.add(translation) session.flush() session.commit() session.close() #versions = IVersioned(self.context) #version = versions.create("'%s' translation added" % language) # reset workflow state #version.status = None #IWorkflowInfo(version).fireTransition("create-translation") # redefine form context and proceed with edit action #self.setUpAdapters(version) #handle_edit_action(self, action, data) # commit version such that it gets a version id #transaction.commit() #if not self._next_url: # self._next_url = ( \ # '%s/versions/%s' % (url, stringKey(version)) + \ # '?portal_status_message=Translation added') self._finished_add = True
def handle_add_save(self, action, data): """After succesful creation of translation, redirect to the view. """ #url = url.absoluteURL(self.context, self.request) #language = get_language_by_name(data["language"])["name"] session = Session() trusted = removeSecurityProxy(self.context) mapper = sa.orm.object_mapper(trusted) pk = getattr(trusted, mapper.primary_key[0].name) curr_trans_by_name = dict( (ct.field_name, ct) for ct in get_translation_for(self.context, data["language"])) def is_changed(context, field_name, new_field_text): if field_name in curr_trans_by_name: old_field_text = curr_trans_by_name[field_name].field_text else: old_field_text = getattr(context, field_name) return not old_field_text == new_field_text translated_attribute_names = [] for field_name in data.keys(): if field_name == "language": continue if is_changed(self.context, field_name, data[field_name]): translated_attribute_names.append(field_name) if field_name in curr_trans_by_name: translation = curr_trans_by_name[field_name] else: translation = domain.ObjectTranslation() translation.object_id = pk translation.object_type = naming.polymorphic_identity( trusted.__class__) translation.field_name = field_name translation.lang = data["language"] session.add(translation) translation.field_text = data[field_name] if translated_attribute_names: session.flush() notify( TranslationCreatedEvent(self.context, data["language"], sorted(translated_attribute_names))) # !+EVENT_DRIVEN_CACHE_INVALIDATION(mr, mar-2011) no translate event # invalidate caches for this domain object type #invalidate_caches_for(trusted.__class__.__name__, "translate") #if not self._next_url: # self._next_url = ( \ # "%s/versions/%s" % (url, stringKey(version)) + \ # "?portal_status_message=Translation added") self._finished_add = True
def handle_add_save(self, action, data): """After succesful creation of translation, redirect to the view. """ #url = url.absoluteURL(self.context, self.request) #language = get_language_by_name(data["language"])["name"] session = Session() trusted = removeSecurityProxy(self.context) mapper = sa.orm.object_mapper(trusted) pk = getattr(trusted, mapper.primary_key[0].name) curr_trans_by_name = dict( (ct.field_name, ct) for ct in get_translation_for(self.context, data["language"])) def is_changed(context, field_name, new_field_text): if field_name in curr_trans_by_name: old_field_text = curr_trans_by_name[field_name].field_text else: old_field_text = getattr(context, field_name) return not old_field_text == new_field_text translated_attribute_names = [] for field_name in data.keys(): if field_name == "language": continue if is_changed(self.context, field_name, data[field_name]): translated_attribute_names.append(field_name) if field_name in curr_trans_by_name: translation = curr_trans_by_name[field_name] else: translation = domain.ObjectTranslation() translation.object_id = pk translation.object_type = naming.polymorphic_identity(trusted.__class__) translation.field_name = field_name translation.lang = data["language"] session.add(translation) translation.field_text = data[field_name] if translated_attribute_names: session.flush() notify(TranslationCreatedEvent(self.context, data["language"], sorted(translated_attribute_names))) # !+EVENT_DRIVEN_CACHE_INVALIDATION(mr, mar-2011) no translate event # invalidate caches for this domain object type #invalidate_caches_for(trusted.__class__.__name__, "translate") #if not self._next_url: # self._next_url = ( \ # "%s/versions/%s" % (url, stringKey(version)) + \ # "?portal_status_message=Translation added") self._finished_add = True
def translate(self, context, name): """Gets translated field values """ lang = get_request_language() if not lang: return getattr(context, name) if interfaces.ITranslatable.providedBy(context): if context.language != lang: translation = get_translation_for(context, lang) translation = filter(lambda tr: tr.field_name == name, translation) if translation: return translation[0].field_text return getattr(context, name)
def translate(self, context, name): lang = get_request_language() if not lang: return getattr(context, name) if interfaces.ITranslatable.providedBy(context): if context.language != lang: translation = get_translation_for(context, lang) translation = filter(lambda tr:tr.field_name==name, translation ) if translation: return translation[0].field_text return getattr(context, name)
def translate(self, context, name): """Gets translated field values """ lang = (get_request_language(default=None) or getattr(context, "language", None)) if not lang: return getattr(context, name, "") if interfaces.ITranslatable.providedBy(context): if context.language != lang: translation = get_translation_for(context, lang) translation = filter(lambda tr: tr.field_name == name, translation) if translation: if translation[0].field_text: return translation[0].field_text return getattr(context, name)
def setUpWidgets(self, ignore_request=False): languages = get_all_languages() self.form_fields = filterFields(self.context, self.form_fields) # do not display empty form fields omit_names = [] for f in self.form_fields: val = getattr(self.context, f.__name__) if val is None: omit_names.append(f.__name__) self.form_fields = self.form_fields.omit(*omit_names) context = self.context if ITranslatable.providedBy(self.context): lang = self.request.locale.getLocaleID() try: translation = get_translation_for(self.context, lang) except: translation = [] if ( not translation and getattr(self.context, "language", None) and getattr(self.context, "language", None) != lang ): supported_lang = languages.get(lang) if supported_lang: langname = supported_lang.get("native", None) if langname == None: langname = supported_lang.get("name") self.status = translate( _(u"This content is not yet translated into" + " $language", mapping={"language": langname}), domain="bungeni", context=self.request, ) context = copy(removeSecurityProxy(self.context)) for field_translation in translation: setattr(context, field_translation.field_name, field_translation.field_text) self.widgets = form.setUpEditWidgets( self.form_fields, "", context, self.request, adapters=self.adapters, for_display=True, ignore_request=ignore_request, )
def setUpWidgets(self, ignore_request=False): languages = get_all_languages() self.form_fields = filterFields(self.context, self.form_fields) #do not display empty form fields omit_names = [] for f in self.form_fields: val = getattr(self.context, f.__name__) if val is None: omit_names.append(f.__name__) self.form_fields = self.form_fields.omit(*omit_names) context = self.context if ITranslatable.providedBy(self.context): lang = self.request.locale.getLocaleID() try: translation = get_translation_for(self.context, lang) except: translation = [] if (not translation and getattr(self.context, "language", None) and getattr(self.context, "language", None) != lang ): supported_lang = languages.get(lang) if supported_lang: langname = supported_lang.get("native", None) if langname == None: langname = supported_lang.get("name") self.status = translate( _(u"This content is not yet translated into" +\ " $language", mapping={"language": langname}), domain="bungeni", context=self.request ) context = copy(removeSecurityProxy(self.context)) for field_translation in translation: setattr(context, field_translation.field_name, field_translation.field_text) self.widgets = form.setUpEditWidgets( self.form_fields, "" , context, self.request, adapters=self.adapters, for_display=True, ignore_request=ignore_request )
def handle_add_save(self, action, data): """After succesful creation of translation, redirect to the view.""" #url = url.absoluteURL(self.context, self.request) #language = get_language_by_name(data["language"])["name"] session = Session() trusted = removeSecurityProxy(self.context) mapper = rdb.orm.object_mapper(trusted) pk = getattr(trusted, mapper.primary_key[0].name) current_translation = get_translation_for(self.context, data["language"]) if current_translation: for translation in current_translation: session.delete(translation) for form_field in data.keys(): if form_field == "language": continue translation = domain.ObjectTranslation() translation.object_id = pk translation.object_type = trusted.__class__.__name__ translation.field_name = form_field translation.lang = data["language"] translation.field_text = data[form_field] session.add(translation) session.flush() # !+EVENT_DRIVEN_CACHE_INVALIDATION(mr, mar-2011) no translate event # invalidate caches for this domain object type invalidate_caches_for(trusted.__class__.__name__, "translate") #if not self._next_url: # self._next_url = ( \ # "%s/versions/%s" % (url, stringKey(version)) + \ # "?portal_status_message=Translation added") self._finished_add = True
def handle_add_save(self, action, data): """After succesful creation of translation, redirect to the view.""" # url = url.absoluteURL(self.context, self.request) # language = get_language_by_name(data["language"])["name"] session = Session() trusted = removeSecurityProxy(self.context) mapper = rdb.orm.object_mapper(trusted) pk = getattr(trusted, mapper.primary_key[0].name) current_translation = get_translation_for(self.context, data["language"]) if current_translation: for translation in current_translation: session.delete(translation) for form_field in data.keys(): if form_field == "language": continue translation = domain.ObjectTranslation() translation.object_id = pk translation.object_type = trusted.__class__.__name__ translation.field_name = form_field translation.lang = data["language"] translation.field_text = data[form_field] session.add(translation) session.flush() # !+EVENT_DRIVEN_CACHE_INVALIDATION(mr, mar-2011) no translate event # invalidate caches for this domain object type invalidate_caches_for(trusted.__class__.__name__, "translate") # if not self._next_url: # self._next_url = ( \ # "%s/versions/%s" % (url, stringKey(version)) + \ # "?portal_status_message=Translation added") self._finished_add = True