Merge branch '1.0'

Conflicts:
	.travis.yml
	composer.json
This commit is contained in:
Ingo Schommer 2013-04-07 14:24:13 +02:00
commit e2c1a7111e
2 changed files with 59 additions and 19 deletions

0
_config.php Normal file
View File

View File

@ -523,7 +523,7 @@ class Translatable extends DataExtension implements PermissionProvider {
// setting translatable fields by inspecting owner - this should really be done in the constructor // setting translatable fields by inspecting owner - this should really be done in the constructor
if($this->owner && $this->translatableFields === null) { if($this->owner && $this->translatableFields === null) {
$this->translatableFields = array_merge( $this->translatableFields = array_merge(
array_keys($this->owner->inheritedDatabaseFields()), array_keys($this->owner->db()),
array_keys($this->owner->has_many()), array_keys($this->owner->has_many()),
array_keys($this->owner->many_many()), array_keys($this->owner->many_many()),
array_keys($this->owner->has_one()) array_keys($this->owner->has_one())
@ -1087,6 +1087,8 @@ class Translatable extends DataExtension implements PermissionProvider {
if(preg_match('/_original$/', $dataField->getName())) continue; if(preg_match('/_original$/', $dataField->getName())) continue;
// Field already has been transformed // Field already has been transformed
if(isset($allDataFields[$dataField->getName() . '_original'])) continue; if(isset($allDataFields[$dataField->getName() . '_original'])) continue;
// CheckboxField which is already transformed
if(preg_match('/class=\"originalvalue\"/', $dataField->Title())) continue;
if(in_array($dataField->getName(), $translatableFieldNames)) { if(in_array($dataField->getName(), $translatableFieldNames)) {
// if the field is translatable, perform transformation // if the field is translatable, perform transformation
@ -1155,8 +1157,14 @@ class Translatable extends DataExtension implements PermissionProvider {
if($this->owner->exists()) { if($this->owner->exists()) {
// HACK need to disable language filtering in augmentSQL(), // HACK need to disable language filtering in augmentSQL(),
// as we purposely want to get different language // as we purposely want to get different language
self::disable_locale_filter(); // also save state of locale-filter, revert to this state at the
// end of this method
$localeFilterEnabled = false;
if(self::locale_filter_enabled()) {
self::disable_locale_filter();
$localeFilterEnabled = true;
}
$translationGroupID = $this->getTranslationGroup(); $translationGroupID = $this->getTranslationGroup();
$baseDataClass = ClassInfo::baseDataClass($this->owner->class); $baseDataClass = ClassInfo::baseDataClass($this->owner->class);
@ -1185,7 +1193,10 @@ class Translatable extends DataExtension implements PermissionProvider {
->leftJoin("{$baseDataClass}_translationgroups", $joinOnClause); ->leftJoin("{$baseDataClass}_translationgroups", $joinOnClause);
} }
self::enable_locale_filter(); // only re-enable locale-filter if it was enabled at the beginning of this method
if($localeFilterEnabled) {
self::enable_locale_filter();
}
return $translations; return $translations;
} }
@ -1731,23 +1742,47 @@ class Translatable_Transformation extends FormTransformation {
return $this->original; return $this->original;
} }
/** public function transformFormField(FormField $field) {
* @todo transformTextareaField() not used at the moment
*/
function transformTextareaField(TextareaField $field) {
$nonEditableField = new ToggleField($fieldname,$field->Title(),'','+','-');
$nonEditableField->labelMore = '+';
$nonEditableField->labelLess = '-';
return $this->baseTransform($nonEditableField, $field);
return $nonEditableField;
}
function transformFormField(FormField $field) {
$newfield = $field->performReadOnlyTransformation(); $newfield = $field->performReadOnlyTransformation();
return $this->baseTransform($newfield, $field); $fn = 'transform' . $field->class;
return $this->hasMethod($fn) ? $this->$fn($newfield, $field) : $this->baseTransform($newfield, $field);
} }
/**
* Transform a translatable CheckboxField to show the field value from the default language
* in the label.
*
* @param FormField $nonEditableField The readonly field to contain the original value
* @param FormField $originalField The original editable field containing the translated value
* @return CheckboxField The field with a modified label
*/
protected function transformCheckboxField(CheckboxField $nonEditableField, CheckboxField $originalField) {
$label = $originalField->Title();
$fieldName = $originalField->getName();
$value = ($this->original->$fieldName)
? _t('Translatable_Transform.CheckboxValueYes', 'Yes')
: _t('Translatable_Transform.CheckboxValueNo', 'No');
$originalLabel = _t(
'Translatable_Transform.OriginalCheckboxLabel',
'Original: {value}',
'Addition to a checkbox field label showing the original value of the translatable field.',
array('value'=>$value)
);
$originalField->setTitle($label . ' <span class="originalvalue">(' . $originalLabel . ')</span>');
return $originalField;
}
/**
* Transform a translatable field to show the field value from the default language
* DataObject below the translated field.
*
* This is a fallback function which handles field types that aren't transformed by
* $this->transform{FieldType} functions.
*
* @param FormField $nonEditableField The readonly field to contain the original value
* @param FormField $originalField The original editable field containing the translated value
* @return \CompositeField The transformed field
*/
protected function baseTransform($nonEditableField, $originalField) { protected function baseTransform($nonEditableField, $originalField) {
$fieldname = $originalField->getName(); $fieldname = $originalField->getName();
@ -1757,7 +1792,12 @@ class Translatable_Transformation extends FormTransformation {
$nonEditableField->setValue($this->original->$fieldname); $nonEditableField->setValue($this->original->$fieldname);
$nonEditableField->setName($fieldname.'_original'); $nonEditableField->setName($fieldname.'_original');
$nonEditableField->addExtraClass('originallang'); $nonEditableField->addExtraClass('originallang');
$nonEditableField->setTitle('Original '.$originalField->Title()); $nonEditableField->setTitle(_t(
'Translatable_Transform.OriginalFieldLabel',
'Original {title}',
'Label for the original value of the translatable field.',
array('title'=>$originalField->Title())
));
$nonEditableField_holder->insertBefore($originalField, $fieldname.'_original'); $nonEditableField_holder->insertBefore($originalField, $fieldname.'_original');
return $nonEditableField_holder; return $nonEditableField_holder;