@@ -148,14 +148,16 @@ protected function getEmptyField(FieldDefinition $fieldDefinition, $languageCode
148148 *
149149 * @param \Ibexa\Contracts\Core\Persistence\Content $content
150150 */
151- public function createExistingFieldsInNewVersion (Content $ content ): void
151+ public function createExistingFieldsInNewVersion (Content $ content, ? string $ editedLanguageCode = null ): void
152152 {
153153 foreach ($ content ->fields as $ field ) {
154154 if ($ field ->id === null ) {
155155 // Virtual field with default value, skip creating field as it has no id
156156 continue ;
157157 }
158- $ this ->createExistingFieldInNewVersion ($ field , $ content );
158+
159+ $ referenceOnly = $ editedLanguageCode !== null && $ field ->languageCode !== $ editedLanguageCode ;
160+ $ this ->createExistingFieldInNewVersion ($ field , $ content , $ referenceOnly );
159161 }
160162 }
161163
@@ -270,12 +272,12 @@ protected function updateField(Field $field, Content $content)
270272 * External data is being copied here as some FieldTypes require original field external data.
271273 * By default copying falls back to storing, it is upon external storage implementation to override
272274 * the behaviour as needed.
273- *
274- * @param \Ibexa\Contracts\Core\Persistence\Content\Field $field
275- * @param \Ibexa\Contracts\Core\Persistence\Content $content
276275 */
277- protected function createExistingFieldInNewVersion (Field $ field , Content $ content )
278- {
276+ protected function createExistingFieldInNewVersion (
277+ Field $ field ,
278+ Content $ content ,
279+ bool $ referenceOnly = false
280+ ): void {
279281 $ originalField = clone $ field ;
280282 $ field ->versionNo = $ content ->versionInfo ->versionNo ;
281283
@@ -288,7 +290,11 @@ protected function createExistingFieldInNewVersion(Field $field, Content $conten
288290 // If the storage handler returns true, it means that $field value has been modified
289291 // So we need to update it in order to store those modifications
290292 // Field converter is called once again via the Mapper
291- if ($ this ->storageHandler ->copyFieldData ($ content ->versionInfo , $ field , $ originalField ) === true ) {
293+ $ storageResult = $ referenceOnly
294+ ? $ this ->storageHandler ->referenceFieldData ($ content ->versionInfo , $ field , $ originalField )
295+ : $ this ->storageHandler ->copyFieldData ($ content ->versionInfo , $ field , $ originalField );
296+
297+ if ($ storageResult === true ) {
292298 $ this ->contentGateway ->updateField (
293299 $ field ,
294300 $ this ->mapper ->convertToStorageValue ($ field )
0 commit comments