Spaces:
No application file
No application file
| namespace MauticPlugin\MauticCrmBundle\Api\Zoho; | |
| use MauticPlugin\MauticCrmBundle\Api\Zoho\Exception\MatchingKeyNotFoundException; | |
| class Mapper | |
| { | |
| private array $contact = []; | |
| private array $mappedFields = []; | |
| private $object; | |
| /** | |
| * @var array[] | |
| */ | |
| private array $objectMappedValues = []; | |
| /** | |
| * Used to keep track of the key used to map contact ID with the response Zoho returns. | |
| */ | |
| private int $objectCounter = 0; | |
| /** | |
| * Used to map contact ID with the response Zoho returns. | |
| */ | |
| private array $contactMapper = []; | |
| public function __construct( | |
| private array $fields | |
| ) { | |
| } | |
| /** | |
| * @return $this | |
| */ | |
| public function setObject($object) | |
| { | |
| $this->object = $object; | |
| return $this; | |
| } | |
| /** | |
| * @return $this | |
| */ | |
| public function setContact(array $contact) | |
| { | |
| $this->contact = $contact; | |
| return $this; | |
| } | |
| /** | |
| * @return $this | |
| */ | |
| public function setMappedFields(array $fields) | |
| { | |
| $this->mappedFields = $fields; | |
| return $this; | |
| } | |
| /** | |
| * @param int $mauticContactId Mautic Contact ID | |
| * @param int|null $zohoId Zoho ID if known | |
| * | |
| * @return int If any single field is mapped, return 1 to count as one contact to be updated | |
| */ | |
| public function map($mauticContactId, $zohoId = null): int | |
| { | |
| $mapped = 0; | |
| $objectMappedValues = []; | |
| foreach ($this->mappedFields as $zohoField => $mauticField) { | |
| $field = $this->getField($zohoField); | |
| if ($field && isset($this->contact[$mauticField]) && $this->contact[$mauticField]) { | |
| $mapped = 1; | |
| $apiField = $field['api_name']; | |
| $apiValue = $this->contact[$mauticField]; | |
| $objectMappedValues[$apiField] = $apiValue; | |
| } | |
| if ($zohoId) { | |
| $objectMappedValues['id'] = $zohoId; | |
| } | |
| } | |
| $this->objectMappedValues[$this->objectCounter] = $objectMappedValues; | |
| $this->contactMapper[$this->objectCounter] = $mauticContactId; | |
| ++$this->objectCounter; | |
| return $mapped; | |
| } | |
| /** | |
| * @return array | |
| */ | |
| public function getArray() | |
| { | |
| return $this->objectMappedValues; | |
| } | |
| /** | |
| * @param int $key | |
| * | |
| * @return int | |
| * | |
| * @throws MatchingKeyNotFoundException | |
| */ | |
| public function getContactIdByKey($key) | |
| { | |
| if (isset($this->contactMapper[$key])) { | |
| return $this->contactMapper[$key]; | |
| } | |
| throw new MatchingKeyNotFoundException(); | |
| } | |
| /** | |
| * @return mixed | |
| */ | |
| private function getField($fieldName) | |
| { | |
| return $this->fields[$this->object][$fieldName] ?? null; | |
| } | |
| } | |