Skip to content

Commit 9ab5790

Browse files
authored
Merge pull request #52 from lehminhs/pimcore10_compatibility
Pimcore10 compatibility
2 parents 9f935e0 + 63e5b48 commit 9ab5790

File tree

2 files changed

+32
-22
lines changed

2 files changed

+32
-22
lines changed

Model/DataObject/ClassDefinition/Data/ObjectBridge.php

+31-21
Original file line numberDiff line numberDiff line change
@@ -382,26 +382,34 @@ public function getDataFromEditmode($data, $object = null, $params = [])
382382
/** @var AbstractObject|string $bridgeClass */
383383
$bridgeClass = $this->getBridgeFullClassName();
384384
$idSourceFieldKey = $sourceClassDef->getName() . '_id';
385-
385+
386386
foreach ($data as $objectData) {
387387
$sourceId = $objectData[$idSourceFieldKey];
388388
$bridgeObjectId = $this->getBridgeIdBySourceAndOwner($object, $bridgeClass, $sourceId);
389389

390390
$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.
391392
/** @var Concrete $bridgeObject */
392393
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));
400412
}
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));
405413
} else {
406414
$bridgeObject = $bridgeClass::getById($bridgeObjectId);
407415
}
@@ -542,16 +550,16 @@ private function getBridgeFullClassName()
542550
private function getBridgeIdBySourceAndOwner($object, $bridgeClass, $sourceId)
543551
{
544552
$db = Db::get();
545-
$select = $db->select()
546-
->from(['dor' => 'object_relations_' . $object::classId()], [])
547-
->joinInner(['dp_objects' => 'object_' . $bridgeClass::classId()], 'dor.dest_id = dp_objects.oo_id AND dor.type = "object"', ['oo_id'])
548-
->where('dor.src_id = ?', $object->getId())
549-
->where('dp_objects.' . $this->bridgeField . '__id = ?', $sourceId);
550553

554+
$select = $db->createQueryBuilder()
555+
->select("dp_objects.oo_id")
556+
->from('object_relations_' . $object::classId(), 'dor')
557+
->innerJoin('dor', 'object_' . $bridgeClass::classId(), 'dp_objects', 'dor.dest_id = dp_objects.oo_id AND dor.type = "object"')
558+
// ->joinInner(['dp_objects' => 'object_' . $bridgeClass::classId()], 'dor.dest_id = dp_objects.oo_id AND dor.type = "object"', ['oo_id'])
559+
->where('dor.src_id = ' . $object->getId())
560+
->andWhere('dp_objects.' . $this->bridgeField . '__id = ' . $sourceId);
551561

552-
$stmt = $db->query($select);
553-
554-
return $stmt->fetch(PDO::FETCH_COLUMN, 0);
562+
return $select->execute()->fetchOne();
555563
}
556564

557565
/**
@@ -660,6 +668,9 @@ public function checkValidity($data, $omitMandatoryCheck = false, $params = [])
660668

661669
/** @var Concrete $objectBridge */
662670
foreach ($data as $objectBridge) {
671+
if (!$objectBridge) {
672+
continue;
673+
}
663674
$bridgeClassFullName = $this->getBridgeFullClassName();
664675
if (!($objectBridge instanceof $bridgeClassFullName)) {
665676
throw new Element\ValidationException('Expected ' . $bridgeClassFullName, 1574671790);
@@ -920,7 +931,6 @@ public function synchronizeWithMasterDefinition(ClassDefinition\Data $masterDefi
920931
$this->bridgeAllowedClassName = $masterDefinition->bridgeAllowedClassName;
921932
$this->bridgeVisibleFields = $masterDefinition->bridgeVisibleFields;
922933
$this->sourceHiddenFields = $masterDefinition->sourceHiddenFields;
923-
$this->bridgeVisibleFields = $masterDefinition->bridgeVisibleFields;
924934
$this->bridgeHiddenFields = $masterDefinition->bridgeHiddenFields;
925935
$this->bridgeField = $masterDefinition->bridgeField;
926936
$this->bridgeFolder = $masterDefinition->bridgeFolder;

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"description": "Allows editing an object inline that doesn't link directly many-to-many like",
44
"type": "pimcore-bundle",
55
"require": {
6-
"pimcore/pimcore": ">=5.6.0"
6+
"pimcore/pimcore": "^10.5"
77
},
88
"license": "MIT",
99
"authors": [

0 commit comments

Comments
 (0)