@@ -388,20 +388,28 @@ public function getDataFromEditmode($data, $object = null, $params = [])
388
388
$ bridgeObjectId = $ this ->getBridgeIdBySourceAndOwner ($ object , $ bridgeClass , $ sourceId );
389
389
390
390
$ sourceObject = $ sourceClass ::getById ($ sourceId );
391
+ // If there is no id check for existing key instead. This is to prevent creating multiple versions of the same bridge object.
391
392
/** @var Concrete $bridgeObject */
392
393
if (!$ bridgeObjectId ) {
393
- $ bridgeObject = new $ bridgeClass ;
394
- $ parent = Model \DataObject \Service::createFolderByPath ($ this ->bridgeFolder );
395
- if (!$ parent instanceof AbstractObject) {
396
- throw new \InvalidArgumentException (
397
- sprintf ('Parent not found at "%s" please check your object bridge configuration "Bridge folder" ' , $ this ->bridgeFolder ),
398
- 1574671788
399
- );
394
+ $ key = $ this ->bridgePrefix . $ object ->getId () . '_ ' . $ sourceObject ->getId ();
395
+ $ existingBridgeObject = $ bridgeClass ::getByKey ($ key )->getObjects ();
396
+
397
+ if (!empty ($ existingBridgeObject )) {
398
+ $ bridgeObject = $ existingBridgeObject [0 ];
399
+ } else {
400
+ $ bridgeObject = new $ bridgeClass ;
401
+ $ parent = Model \DataObject \Service::createFolderByPath ($ this ->bridgeFolder );
402
+ if (!$ parent instanceof AbstractObject) {
403
+ throw new \InvalidArgumentException (
404
+ sprintf ('Parent not found at "%s" please check your object bridge configuration "Bridge folder" ' , $ this ->bridgeFolder ),
405
+ 1574671788
406
+ );
407
+ }
408
+ $ bridgeObject ->setParent ($ parent );
409
+ $ bridgeObject ->setKey ($ this ->bridgePrefix . $ object ->getId () . '_ ' . $ sourceObject ->getId ());
410
+ // Make sure its unique else saving will throw an error
411
+ $ bridgeObject ->setKey (Model \DataObject \Service::getUniqueKey ($ bridgeObject ));
400
412
}
401
- $ bridgeObject ->setParent ($ parent );
402
- $ bridgeObject ->setKey ($ this ->bridgePrefix . $ object ->getId () . '_ ' . $ sourceObject ->getId ());
403
- // Make sure its unique else saving will throw an error
404
- $ bridgeObject ->setKey (Model \DataObject \Service::getUniqueKey ($ bridgeObject ));
405
413
} else {
406
414
$ bridgeObject = $ bridgeClass ::getById ($ bridgeObjectId );
407
415
}
@@ -660,6 +668,9 @@ public function checkValidity($data, $omitMandatoryCheck = false, $params = [])
660
668
661
669
/** @var Concrete $objectBridge */
662
670
foreach ($ data as $ objectBridge ) {
671
+ if (!$ objectBridge ) {
672
+ continue ;
673
+ }
663
674
$ bridgeClassFullName = $ this ->getBridgeFullClassName ();
664
675
if (!($ objectBridge instanceof $ bridgeClassFullName )) {
665
676
throw new Element \ValidationException ('Expected ' . $ bridgeClassFullName , 1574671790 );
0 commit comments