I’ve been trying to find out from where is the select input field for merging companies getting populated with company options. I’ve found out that it is working through ajax calls in CompanyListType.php
through this function:
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults(
[
'label' => 'mautic.lead.lead.companies',
'entity_label_column' => 'companyname',
'modal_route' => 'mautic_company_action',
'modal_header' => 'mautic.company.new.company',
'model' => 'lead.company',
'ajax_lookup_action' => 'lead:getLookupChoiceList',
'multiple' => true,
'main_entity' => 'main_entity',
]
);
}
From here, how does the control go to AjaxLookupController.php
? I believe this function from AjaxLookupControllerTrait.php
is then responsible for getting the companies data:
public function getLookupChoiceListAction(Request $request): JsonResponse
{
$dataArray = [];
$modelName = InputHelper::clean($request->query->get('searchKey'));
$search = InputHelper::clean($request->query->get(str_replace('.', '_', $modelName)));
$limit = (int) $request->query->get('limit', '0');
$start = (int) $request->query->get('start', '0');
if (!$modelName) {
throw new BadRequestException('The searchKey parameter is required.');
}
if (!$search) {
return new JsonResponse($dataArray);
}
$model = $this->getModel($modelName);
if (!$model instanceof AjaxLookupModelInterface) {
throw new BadRequestException("The model {$modelName} must implement the AjaxLookupModelInterface.");
}
$results = $model->getLookupResults($modelName, $search, $limit, $start);
foreach ($results as $group => $result) {
$option = [];
if (is_array($result)) {
if (!isset($result['value'])) {
// Grouped options
$option = [
'group' => true,
'text' => $group,
'items' => $result,
];
foreach ($result as $value => $label) {
if (is_array($label) && isset($label['label'])) {
$option['items'][$value]['text'] = $label['label'];
}
}
} else {
if (isset($result['label'])) {
$option['text'] = $result['label'];
}
$option['value'] = $result['value'];
}
} else {
$option[$group] = $result;
}
$dataArray[] = $option;
}
return new JsonResponse($dataArray);
}
I am having trouble understanding the flow of control here. How can I pass parameters from CompanyListType.php
to this function?