Skip to content

Commit dc1c7a9

Browse files
authored
Merge pull request #1632 from vbartusevicius/v2.4.x
2.4.x compatibility for PR#1631
2 parents 8f172af + 3d2133c commit dc1c7a9

File tree

2 files changed

+48
-24
lines changed

2 files changed

+48
-24
lines changed

lib/Gedmo/Translatable/Mapping/Driver/Xml.php

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public function readExtendedMetadata($meta, array &$config)
3131
$xml = $xml->children(self::GEDMO_NAMESPACE_URI);
3232

3333
if (($xmlDoctrine->getName() == 'entity' || $xmlDoctrine->getName() == 'mapped-superclass')) {
34-
if (isset($xml->translation)) {
34+
if ($xml->count() && isset($xml->translation)) {
3535
/**
3636
* @var \SimpleXmlElement $data
3737
*/
@@ -53,8 +53,14 @@ public function readExtendedMetadata($meta, array &$config)
5353

5454
if (property_exists($meta, 'embeddedClasses') && $meta->embeddedClasses) {
5555
foreach ($meta->embeddedClasses as $propertyName => $embeddedClassInfo) {
56-
$xmlEmbbededClass = $this->_getMapping($embeddedClassInfo['class']);
57-
$this->inspectElementsForTranslatableFields($xmlEmbbededClass, $config, $propertyName);
56+
$xmlEmbeddedClass = $this->_getMapping($embeddedClassInfo['class']);
57+
$this->inspectElementsForTranslatableFields($xmlEmbeddedClass, $config, $propertyName);
58+
}
59+
}
60+
61+
if ($xmlDoctrine->{'attribute-overrides'}->count() > 0) {
62+
foreach ($xmlDoctrine->{'attribute-overrides'}->{'attribute-override'} as $overrideMapping) {
63+
$this->buildFieldConfiguration($this->_getAttribute($overrideMapping, 'name'), $overrideMapping->field, $config);
5864
}
5965
}
6066

@@ -75,18 +81,24 @@ private function inspectElementsForTranslatableFields(\SimpleXMLElement $xml, ar
7581

7682
foreach ($xml->field as $mapping) {
7783
$mappingDoctrine = $mapping;
78-
/**
79-
* @var \SimpleXmlElement $mapping
80-
*/
81-
$mapping = $mapping->children(self::GEDMO_NAMESPACE_URI);
82-
$field = null !== $prefix ? $prefix . '.' . $this->_getAttribute($mappingDoctrine, 'name') : $this->_getAttribute($mappingDoctrine, 'name');
83-
if (isset($mapping->translatable)) {
84-
$config['fields'][] = $field;
85-
/** @var \SimpleXmlElement $data */
86-
$data = $mapping->translatable;
87-
if ($this->_isAttributeSet($data, 'fallback')) {
88-
$config['fallback'][$field] = 'true' == $this->_getAttribute($data, 'fallback') ? true : false;
89-
}
84+
85+
$fieldName = $this->_getAttribute($mappingDoctrine, 'name');
86+
if ($prefix !== null) {
87+
$fieldName = $prefix . '.' . $fieldName;
88+
}
89+
$this->buildFieldConfiguration($fieldName, $mapping, $config);
90+
}
91+
}
92+
93+
private function buildFieldConfiguration($fieldName, \SimpleXMLElement $mapping, array &$config)
94+
{
95+
$mapping = $mapping->children(self::GEDMO_NAMESPACE_URI);
96+
if ($mapping->count() > 0 && isset($mapping->translatable)) {
97+
$config['fields'][] = $fieldName;
98+
/** @var \SimpleXmlElement $data */
99+
$data = $mapping->translatable;
100+
if ($this->_isAttributeSet($data, 'fallback')) {
101+
$config['fallback'][$fieldName] = 'true' == $this->_getAttribute($data, 'fallback') ? true : false;
90102
}
91103
}
92104
}

lib/Gedmo/Translatable/Mapping/Driver/Yaml.php

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,17 +45,16 @@ public function readExtendedMetadata($meta, array &$config)
4545
$config['locale'] = $classMapping['translation']['language'];
4646
}
4747
}
48+
4849
if (isset($mapping['fields'])) {
4950
foreach ($mapping['fields'] as $field => $fieldMapping) {
50-
if (isset($fieldMapping['gedmo'])) {
51-
if (in_array('translatable', $fieldMapping['gedmo']) || isset($fieldMapping['gedmo']['translatable'])) {
52-
// fields cannot be overrided and throws mapping exception
53-
$config['fields'][] = $field;
54-
if (isset($fieldMapping['gedmo']['translatable']['fallback'])) {
55-
$config['fallback'][$field] = $fieldMapping['gedmo']['translatable']['fallback'];
56-
}
57-
}
58-
}
51+
$this->buildFieldConfiguration($field, $fieldMapping, $config);
52+
}
53+
}
54+
55+
if (isset($mapping['attributeOverride'])) {
56+
foreach ($mapping['attributeOverride'] as $field => $overrideMapping) {
57+
$this->buildFieldConfiguration($field, $overrideMapping, $config);
5958
}
6059
}
6160

@@ -73,4 +72,17 @@ protected function _loadMappingFile($file)
7372
{
7473
return \Symfony\Component\Yaml\Yaml::parse(file_get_contents($file));
7574
}
75+
76+
private function buildFieldConfiguration($field, array $fieldMapping, array &$config)
77+
{
78+
if (isset($fieldMapping['gedmo'])) {
79+
if (in_array('translatable', $fieldMapping['gedmo']) || isset($fieldMapping['gedmo']['translatable'])) {
80+
// fields cannot be overrided and throws mapping exception
81+
$config['fields'][] = $field;
82+
if (isset($fieldMapping['gedmo']['translatable']['fallback'])) {
83+
$config['fallback'][$field] = $fieldMapping['gedmo']['translatable']['fallback'];
84+
}
85+
}
86+
}
87+
}
7688
}

0 commit comments

Comments
 (0)