Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\FormBundle\Helper; | |
use Mautic\FormBundle\Model\FormModel; | |
class PropertiesAccessor | |
{ | |
public function __construct( | |
private FormModel $formModel | |
) { | |
} | |
/** | |
* @param mixed[] $field | |
* | |
* @return mixed[] | |
*/ | |
public function getProperties(array $field) | |
{ | |
$hasContactFieldMapped = !empty($field['mappedField']) && !empty($field['mappedObject']) && 'contact' === $field['mappedObject']; | |
if ('country' === $field['type'] || ($hasContactFieldMapped && !empty($field['properties']['syncList']))) { | |
return $this->formModel->getContactFieldPropertiesList((string) $field['mappedField']); | |
} elseif (!empty($field['properties'])) { | |
return $this->getOptionsListFromProperties($field['properties']); | |
} | |
return []; | |
} | |
/** | |
* @param string|mixed[] $options | |
* | |
* @return string[] | |
*/ | |
public function getChoices($options): array | |
{ | |
$choices = []; | |
if (is_array($options) && !isset($options[0]['value'])) { | |
return array_flip($options); | |
} | |
if (!is_array($options)) { | |
$options = explode('|', (string) $options); | |
} | |
foreach ($options as $option) { | |
if (is_array($option)) { | |
if (isset($option['label']) && isset($option['alias'])) { | |
$choices[$option['label']] = $option['alias']; | |
} elseif (isset($option['label']) && isset($option['value'])) { | |
$choices[$option['label']] = $option['value']; | |
} else { | |
foreach ($option as $opt) { | |
$choices[$opt] = $opt; | |
} | |
} | |
} else { | |
$choices[$option] = $option; | |
} | |
} | |
return $choices; | |
} | |
/** | |
* @param array<string,mixed> $properties | |
* | |
* @return mixed[] | |
*/ | |
private function getOptionsListFromProperties(array $properties) | |
{ | |
if (!empty($properties['list']['list'])) { | |
return $properties['list']['list']; | |
} elseif (!empty($properties['optionlist']['list'])) { | |
return $properties['optionlist']['list']; | |
} | |
return []; | |
} | |
} | |