You are here

public function WebformOptionsController::autocomplete in Webform 8.5

Same name and namespace in other branches
  1. 6.x src/Controller/WebformOptionsController.php \Drupal\webform\Controller\WebformOptionsController::autocomplete()

Returns response for the webform options autocompletion.

Parameters

\Symfony\Component\HttpFoundation\Request $request: The current request object containing the search string.

Return value

\Symfony\Component\HttpFoundation\JsonResponse A JSON response containing the autocomplete suggestions.

1 string reference to 'WebformOptionsController::autocomplete'
webform.routing.yml in ./webform.routing.yml
webform.routing.yml

File

src/Controller/WebformOptionsController.php, line 24

Class

WebformOptionsController
Provides route responses for Webform options.

Namespace

Drupal\webform\Controller

Code

public function autocomplete(Request $request) {
  $q = $request->query
    ->get('q');
  $webform_options_storage = $this
    ->entityTypeManager()
    ->getStorage('webform_options');
  $query = $webform_options_storage
    ->getQuery()
    ->range(0, 10)
    ->sort('label');

  // Query title and id.
  $or = $query
    ->orConditionGroup()
    ->condition('id', $q, 'CONTAINS')
    ->condition('label', $q, 'CONTAINS');
  $query
    ->condition($or);
  $entity_ids = $query
    ->execute();
  if (empty($entity_ids)) {
    return new JsonResponse([]);
  }
  $webform_options = $webform_options_storage
    ->loadMultiple($entity_ids);
  $matches = [];
  foreach ($webform_options as $webform_option) {
    $value = new FormattableMarkup('@label (@id)', [
      '@label' => $webform_option
        ->label(),
      '@id' => $webform_option
        ->id(),
    ]);
    $matches[] = [
      'value' => $value,
      'label' => $value,
    ];
  }
  return new JsonResponse($matches);
}