Files
CloudOps/docker-compose/mautic-setup/mautic-backup-files/docroot/app/bundles/LeadBundle/Field/IdentifierFields.php

92 lines
2.2 KiB
PHP
Executable File

<?php
declare(strict_types=1);
namespace Mautic\LeadBundle\Field;
use Mautic\LeadBundle\Entity\Company;
use Mautic\LeadBundle\Entity\IdentifierFieldEntityInterface;
use Mautic\LeadBundle\Entity\Lead;
class IdentifierFields
{
public function __construct(
private FieldsWithUniqueIdentifier $fieldsWithUniqueIdentifier,
private FieldList $fieldList,
) {
}
/**
* @return string[]
*/
public function getFieldList(string $object, ?object $entityClass = null): array
{
return array_merge(
$this->getDefaultFields($object, $entityClass),
$this->getUniqueIdentifierFields($object),
$this->getSocialFields($object)
);
}
/**
* @return string[]
*/
private function getDefaultFields(string $object, ?object $entityClass): array
{
if (null === $entityClass) {
switch ($object) {
case 'lead':
$entityClass = Lead::class;
break;
case 'company':
$entityClass = Company::class;
break;
default:
return [];
}
}
if (is_subclass_of($entityClass, IdentifierFieldEntityInterface::class)) {
return $entityClass::getDefaultIdentifierFields();
}
// The class wasn't recognized or doesn't implement the interface
return [];
}
/**
* @return string[]
*/
private function getUniqueIdentifierFields(string $object): array
{
$fields = $this->fieldsWithUniqueIdentifier->getFieldsWithUniqueIdentifier(
[
'object' => $object,
]
);
return array_keys($fields);
}
/**
* @return string[]
*/
private function getSocialFields(string $object): array
{
$fields = $this->fieldList->getFieldList(
true,
false,
[
'isPublished' => true,
'object' => $object,
]
);
if (!isset($fields['Social'])) {
return [];
}
return array_keys($fields['Social']);
}
}