Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\CoreBundle\Controller; | |
use Mautic\CoreBundle\Helper\InputHelper; | |
use Mautic\CoreBundle\Model\AjaxLookupModelInterface; | |
use Symfony\Component\HttpFoundation\Exception\BadRequestException; | |
use Symfony\Component\HttpFoundation\JsonResponse; | |
use Symfony\Component\HttpFoundation\Request; | |
trait AjaxLookupControllerTrait | |
{ | |
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); | |
} | |
/** | |
* Get a model instance from the service container. | |
* | |
* @param string $modelNameKey | |
* | |
* @return AbstractCommonModel<object> | |
*/ | |
abstract protected function getModel($modelNameKey); | |
/** | |
* Get's the content of error page. | |
* | |
* @return Response | |
*/ | |
abstract public function renderException(\Exception $e); | |
} | |