Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\IntegrationsBundle\Sync\Helper; | |
use Mautic\IntegrationsBundle\Sync\DAO\Mapping\MappingManualDAO; | |
use Mautic\IntegrationsBundle\Sync\DAO\Sync\Report\ObjectDAO; | |
use Mautic\IntegrationsBundle\Sync\DAO\Sync\Report\RelationDAO; | |
use Mautic\IntegrationsBundle\Sync\DAO\Sync\Report\ReportDAO; | |
use Mautic\IntegrationsBundle\Sync\Exception\InternalIdNotFoundException; | |
use Mautic\IntegrationsBundle\Sync\Exception\ObjectNotFoundException; | |
class RelationsHelper | |
{ | |
private $objectsToSynchronize = []; | |
public function __construct( | |
private MappingHelper $mappingHelper | |
) { | |
} | |
public function processRelations(MappingManualDAO $mappingManualDao, ReportDAO $syncReport): void | |
{ | |
$this->objectsToSynchronize = []; | |
foreach ($syncReport->getRelations() as $relationObject) { | |
if (0 < $relationObject->getRelObjectInternalId()) { | |
continue; | |
} | |
$this->processRelation($mappingManualDao, $syncReport, $relationObject); | |
} | |
} | |
public function getObjectsToSynchronize(): array | |
{ | |
return $this->objectsToSynchronize; | |
} | |
/** | |
* @throws \Mautic\IntegrationsBundle\Sync\Exception\FieldNotFoundException | |
* @throws \Mautic\IntegrationsBundle\Sync\Exception\ObjectDeletedException | |
* @throws \Mautic\IntegrationsBundle\Sync\Exception\ObjectNotSupportedException | |
*/ | |
private function processRelation(MappingManualDAO $mappingManualDao, ReportDAO $syncReport, RelationDAO $relationObject): void | |
{ | |
$relObjectDao = new ObjectDAO($relationObject->getRelObjectName(), $relationObject->getRelObjectIntegrationId()); | |
try { | |
$internalObjectName = $this->getInternalObjectName($mappingManualDao, $relationObject->getRelObjectName()); | |
$internalObjectId = $this->getInternalObjectId($mappingManualDao, $relationObject, $relObjectDao); | |
$this->addObjectInternalId($internalObjectId, $internalObjectName, $relationObject, $syncReport); | |
} catch (ObjectNotFoundException) { | |
return; // We are not mapping this object | |
} catch (InternalIdNotFoundException) { | |
$this->objectsToSynchronize[] = $relObjectDao; | |
} | |
} | |
/** | |
* @throws InternalIdNotFoundException | |
*/ | |
private function getInternalObjectId(MappingManualDAO $mappingManualDao, RelationDAO $relationObject, ObjectDAO $relObjectDao): int | |
{ | |
$relObject = $this->findInternalObject($mappingManualDao, $relationObject->getRelObjectName(), $relObjectDao); | |
$internalObjectId = (int) $relObject->getObjectId(); | |
if ($internalObjectId) { | |
return $internalObjectId; | |
} | |
throw new InternalIdNotFoundException($relationObject->getRelObjectName()); | |
} | |
/** | |
* @throws ObjectNotFoundException | |
* @throws \Mautic\IntegrationsBundle\Sync\Exception\ObjectDeletedException | |
* @throws \Mautic\IntegrationsBundle\Sync\Exception\ObjectNotSupportedException | |
*/ | |
private function findInternalObject(MappingManualDAO $mappingManualDao, string $relObjectName, ObjectDAO $objectDao): ObjectDAO | |
{ | |
$internalObjectsName = $this->getInternalObjectName($mappingManualDao, $relObjectName); | |
return $this->mappingHelper->findMauticObject($mappingManualDao, $internalObjectsName, $objectDao); | |
} | |
/** | |
* @throws \Mautic\IntegrationsBundle\Sync\Exception\FieldNotFoundException | |
*/ | |
private function addObjectInternalId(int $relObjectId, string $relInternalType, RelationDAO $relationObject, ReportDAO $syncReport): void | |
{ | |
$relationObject->setRelObjectInternalId($relObjectId); | |
$objectDAO = $syncReport->getObject($relationObject->getObjectName(), $relationObject->getObjectIntegrationId()); | |
$referenceValue = $objectDAO->getField($relationObject->getRelFieldName())->getValue()->getNormalizedValue(); | |
$referenceValue->setType($relInternalType); | |
$referenceValue->setValue($relObjectId); | |
} | |
/** | |
* @return mixed | |
* | |
* @throws ObjectNotFoundException | |
*/ | |
private function getInternalObjectName(MappingManualDAO $mappingManualDao, string $relObjectName) | |
{ | |
$internalObjectsNames = $mappingManualDao->getMappedInternalObjectsNames($relObjectName); | |
return $internalObjectsNames[0]; | |
} | |
} | |