def render(self): self.request['disable_border'] = True for field in self.fields.keys(): if field in self.schema: if ILanguageIndependentField.providedBy(self.schema[field]): self.widgets[field].addClass('languageindependent') # With plone.autoform, fieldnames from additional schematas # reference their schema by prefixing their fieldname # with schema.__identifier__ and then a dot as a separator # See autoform.txt in the autoform package if '.' not in field: continue schemaname, fieldname = field.split('.') for add_schema in self.additionalSchemata: if ( schemaname == add_schema.__identifier__ and fieldname in add_schema and ILanguageIndependentField.providedBy( add_schema[fieldname]) ): self.widgets[field].addClass('languageindependent') self.babel_content = super(MultilingualAddForm, self).render() return self.babel()
def copy_fields(self, translation): doomed = False target_language = queryAdapter(translation, ILanguage).get_language() def relation_copier(rel, lang=target_language, fun=self.copy_relation): return fun(rel, lang) for schema in iterSchemata(self.context): for field_name in schema: if ILanguageIndependentField.providedBy(schema[field_name]): value = getattr(schema(self.context), field_name, _marker) if value == _marker: continue elif IRelationValue.providedBy(value): value = self.copy_relation(value, target_language) elif IRelationList.providedBy(schema[field_name]): value = map(relation_copier, value or []) doomed = True setattr(schema(translation), field_name, value) # If at least one field has been copied over to the translation # we need to inform subscriber to trigger an ObjectModifiedEvent # on that translation. return doomed
def copy_fields(self, translation): doomed = False target_language = queryAdapter(translation, ILanguage).get_language() relation_copier = lambda r, l=target_language, f=self.copy_relation: f(r, l) for schema in iterSchemata(self.context): for field_name in schema: if ILanguageIndependentField.providedBy(schema[field_name]): value = getattr(schema(self.context), field_name, _marker) if value == _marker: continue elif IRelationValue.providedBy(value): value = self.copy_relation(value, target_language) elif IRelationList.providedBy(schema[field_name]): value = map(relation_copier, value or []) doomed = True setattr(schema(translation), field_name, value) # If at least one field has been copied over to the translation # we need to inform subscriber to trigger an ObjectModifiedEvent # on that translation. return doomed
def render(self): self.request['disable_border'] = True for field in self.fields.keys(): if field in self.schema: if ILanguageIndependentField.providedBy(self.schema[field]): self.widgets[field].addClass('languageindependent') # With plone.autoform, fieldnames from additional schematas # reference their schema by prefixing their fieldname # with schema.__identifier__ and then a dot as a separator # See autoform.txt in the autoform package if '.' in field: schemaname, fieldname = field.split('.') for schema in self.additionalSchemata: if schemaname == schema.__identifier__ \ and fieldname in schema: if ILanguageIndependentField.providedBy(schema[fieldname]): # noqa self.widgets[field].addClass('languageindependent') self.babel_content = super(MultilingualEditForm, self).render() return self.babel()
def test_inherited_schema_still_has_tagged_value(self): """An inherited schema should still have the tagged value information inherited from its superclass. """ class IFoo(model.Schema): """Class with a searchable field """ languageindependent('baz') baz = schema.TextLine(title=u'baz') class IBar(IFoo): """Schema class which inherits a field from IFoo. """ self.assertEqual([(Interface, 'baz', 'true')], mergedTaggedValueList(IFoo, languageindependent.key)) self.assertTrue(ILanguageIndependentField.providedBy(IFoo['baz'])) self.assertEqual([(Interface, 'baz', 'true')], mergedTaggedValueList(IBar, languageindependent.key)) self.assertTrue(ILanguageIndependentField.providedBy(IBar['baz']))
def set_field_language_independent(self, portal_type, field, value="1"): """Set the given field in the given portal type language independent or unset from being one """ for schema in iterSchemataForType(portal_type): if field in schema: ob = schema[field] if ILanguageIndependentField.providedBy(ob): if value.lower() not in ("true", "on", "yes", "y", "1"): noLongerProvides(schema[ob], ILanguageIndependentField) else: if value.lower() in ("true", "on", "yes", "y", "1"): alsoProvides(ob, ILanguageIndependentField)
def test_inherited_schema_still_has_tagged_value(self): """An inherited schema should still have the tagged value information inherited from its superclass. """ class IFoo(model.Schema): """Class with a searchable field """ languageindependent('baz') baz = schema.TextLine(title=u'baz') class IBar(IFoo): """Schema class which inherits a field from IFoo. """ self.assertEqual([(Interface, 'baz', 'true')], mergedTaggedValueList(IFoo, languageindependent.key)) self.assertTrue(ILanguageIndependentField.providedBy(IFoo['baz'])) self.assertEqual([(Interface, 'baz', 'true')], mergedTaggedValueList(IBar, languageindependent.key)) self.assertTrue(ILanguageIndependentField.providedBy(IBar['baz']))
def set_field_language_independent(self, portal_type, field, value='1'): """Set the given field in the given portal type language independent or unset from being one """ for schema in iterSchemataForType(portal_type): if field in schema: ob = schema[field] if ILanguageIndependentField.providedBy(ob): if value.lower() not in ('true', 'on', 'yes', 'y', '1'): noLongerProvides(schema[ob], ILanguageIndependentField) else: if value.lower() in ('true', 'on', 'yes', 'y', '1'): alsoProvides(ob, ILanguageIndependentField)
def set_field_language_independent(self, portal_type, field, value='1'): """Set the given field in the given portal type language independent or unset from being one """ disableCSRFProtection() for schema in iterSchemataForType(portal_type): if field in schema: ob = schema[field] if ILanguageIndependentField.providedBy(ob): if value.lower() not in ('true', 'on', 'yes', 'y', '1'): noLongerProvides(schema[ob], ILanguageIndependentField) else: if value.lower() in ('true', 'on', 'yes', 'y', '1'): alsoProvides(ob, ILanguageIndependentField)
def test_schema_directives_store_tagged_values(self): """Test, if the schema directive values are stored as tagged values. """ class IDummy(model.Schema): """Dummy schema class. """ languageindependent('foo') foo = schema.TextLine(title=u'Foo') self.assertEqual([(Interface, 'foo', 'true')], mergedTaggedValueList(IDummy, languageindependent.key)) self.assertTrue(ILanguageIndependentField.providedBy(IDummy['foo']))
def test_schema_directives_store_tagged_values(self): """Test, if the schema directive values are stored as tagged values. """ class IDummy(model.Schema): """Dummy schema class. """ languageindependent('foo') foo = schema.TextLine(title=u'Foo') self.assertEqual([(Interface, 'foo', 'true')], mergedTaggedValueList(IDummy, languageindependent.key)) self.assertTrue(ILanguageIndependentField.providedBy(IDummy['foo']))
def has_independent_fields(self): fti = getUtility(IDexterityFTI, name=self.context.portal_type) schemas = [] schemas.append(fti.lookupSchema()) for behavior_schema in \ utils.getAdditionalSchemata(self.context, self.context.portal_type): if behavior_schema is not None: schemas.append(behavior_schema) for schema in schemas: for field_name in schema: if ILanguageIndependentField.providedBy(schema[field_name]): return True return False
def _process_language_independent(self, fields, widgets): for field_key in fields.keys(): if field_key in self.schema: schema_field = self.schema[field_key] else: # With plone.autoform, fieldnames from additional schematas # reference their schema by prefixing their fieldname # with schema.__identifier__ and then a dot as a separator # See autoform.txt in the autoform package if '.' not in field_key: continue schema_name, field_name = field_key.split('.') for aschema in self.additionalSchemata: if schema_name == aschema.__name__ \ and field_name in aschema: schema_field = aschema[field_name] break if ILanguageIndependentField.providedBy(schema_field): widgets[field_key].addClass('languageindependent')
def _process_language_independent(self, fields, widgets): for field_key in fields.keys(): if field_key in self.schema: schema_field = self.schema[field_key] else: # With plone.autoform, fieldnames from additional schematas # reference their schema by prefixing their fieldname # with schema.__identifier__ and then a dot as a separator # See autoform.txt in the autoform package if '.' not in field_key: continue schema_name, field_name = field_key.split('.') for aschema in self.additionalSchemata: if schema_name == aschema.__name__ \ and field_name in aschema: schema_field = aschema[field_name] break if ILanguageIndependentField.providedBy(schema_field): widgets[field_key].addClass('languageindependent')
def copy_fields(self, translation): fti = getUtility(IDexterityFTI, name=self.context.portal_type) schemas = [] schemas.append(fti.lookupSchema()) for behavior_schema in \ utils.getAdditionalSchemata(self.context, self.context.portal_type): if behavior_schema is not None: schemas.append(behavior_schema) doomed = False for schema in schemas: for field_name in schema: if ILanguageIndependentField.providedBy(schema[field_name]): doomed = True value = getattr(schema(self.context), field_name, _marker) if IRelationValue.providedBy(value): obj = value.to_object adapter = queryAdapter(translation, ILanguage) trans_obj = ITranslationManager(obj)\ .get_translation(adapter.get_language()) if trans_obj: intids = component.getUtility(IIntIds) value = RelationValue(intids.getId(trans_obj)) if not (value == _marker): # We check if not (value == _marker) because # z3c.relationfield has an __eq__ setattr(schema(translation), field_name, value) # If at least one field has been copied over to the translation # we need to inform subscriber to trigger an ObjectModifiedEvent # on that translation. return doomed
def test_field_is_independent(self): self.assertTrue(ILanguageIndependentField.providedBy(self.field))
def write(self, fieldNode, schema, field): if ILanguageIndependentField.providedBy(field): fieldNode.set(ns('independent', self.namespace), "true")
def has_independent_fields(self): for schema in iterSchemata(self.context): for field_name in schema: if ILanguageIndependentField.providedBy(schema[field_name]): return True return False
def _read_languageindependent(self): return ILanguageIndependentField.providedBy(self.field)
def has_independent_fields(self): for schema in iterSchemata(self.context): for field_name in schema: if ILanguageIndependentField.providedBy(schema[field_name]): return True return False
def test_field_is_independent(self): self.assertTrue(ILanguageIndependentField.providedBy(self.field))
def _read_languageindependent(self): return ILanguageIndependentField.providedBy(self.field)
def write(self, fieldNode, schema, field): if ILanguageIndependentField.providedBy(field): fieldNode.set(ns('independent', self.namespace), "true")