![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/LeadBundle/Helper/ |
<?php namespace Mautic\LeadBundle\Helper; use Mautic\LeadBundle\Entity\Company; use Mautic\LeadBundle\Exception\UniqueFieldNotFoundException; use Mautic\LeadBundle\Model\CompanyModel; class IdentifyCompanyHelper { /** * @param array $data * @param mixed $lead */ public static function identifyLeadsCompany($data, $lead, CompanyModel $companyModel): array { $addContactToCompany = true; $parameters = self::normalizeParameters($data); if (!self::hasCompanyParameters($parameters, $companyModel)) { return [null, false, null]; } try { $companies = $companyModel->checkForDuplicateCompanies($parameters); } catch (UniqueFieldNotFoundException) { return [null, false, null]; } if (!empty($companies)) { $companyEntity = end($companies); $companyData = $companyEntity->getProfileFields(); if ($lead) { $companyLeadRepo = $companyModel->getCompanyLeadRepository(); $companyLead = $companyLeadRepo->getCompaniesByLeadId($lead->getId(), $companyEntity->getId()); if (!empty($companyLead)) { $addContactToCompany = false; } } } else { $companyData = $parameters; // create new company $companyEntity = new Company(); $companyModel->setFieldValues($companyEntity, $companyData, true); $companyModel->saveEntity($companyEntity); $companyData['id'] = $companyEntity->getId(); } return [$companyData, $addContactToCompany, $companyEntity]; } public static function findCompany(array $data, CompanyModel $companyModel): array { $parameters = self::normalizeParameters($data); if (!self::hasCompanyParameters($parameters, $companyModel)) { return [[], []]; } try { $companyEntities = $companyModel->checkForDuplicateCompanies($parameters); } catch (UniqueFieldNotFoundException) { return [[], []]; } $companyData = $parameters; if (!empty($companyEntities)) { $key = array_key_last($companyEntities); $companyData['id'] = $companyEntities[$key]->getId(); } return [$companyData, $companyEntities]; } private static function hasCompanyParameters(array $parameters, CompanyModel $companyModel): bool { $companyFields = $companyModel->fetchCompanyFields(); foreach ($parameters as $alias => $value) { foreach ($companyFields as $companyField) { if ($companyField['alias'] === $alias) { return true; } } } return false; } /** * @param mixed[] $parameters * * @return mixed[] */ private static function normalizeParameters(array $parameters): array { if (isset($parameters['company'])) { $parameters['companyname'] = filter_var($parameters['company']); unset($parameters['company']); } $fields= ['country', 'city', 'state']; foreach ($fields as $field) { if (isset($parameters[$field]) && !isset($parameters['company'.$field])) { $parameters['company'.$field] = $parameters[$field]; unset($parameters[$field]); } } return $parameters; } /** * Checks if email address' domain has a DNS MX record. Returns the domain if found. * * @param string $email * * @return string|false */ protected static function domainExists($email) { if (!strstr($email, '@')) { // not a valid email adress return false; } [$user, $domain] = explode('@', $email); $arr = dns_get_record($domain, DNS_MX); if (empty($arr)) { return false; } if ($arr[0]['host'] === $domain) { return $domain; } return false; } }