Spaces:
No application file
No application file
File size: 4,405 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
<?php
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];
}
}
|