Spaces:
No application file
No application file
File size: 2,729 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
<?php
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);
}
|