Same filename and directory in other branches
- 8.9.x core/modules/system/src/Controller/EntityAutocompleteController.php
- 9 core/modules/system/src/Controller/EntityAutocompleteController.php
Namespace
Drupal\system\Controller
File
core/modules/system/src/Controller/EntityAutocompleteController.php
View source
<?php
namespace Drupal\system\Controller;
use Drupal\Component\Utility\Crypt;
use Drupal\Component\Utility\Tags;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Entity\EntityAutocompleteMatcherInterface;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\Site\Settings;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
class EntityAutocompleteController extends ControllerBase {
protected $matcher;
protected $keyValue;
public function __construct(EntityAutocompleteMatcherInterface $matcher, KeyValueStoreInterface $key_value) {
$this->matcher = $matcher;
$this->keyValue = $key_value;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('entity.autocomplete_matcher'), $container
->get('keyvalue')
->get('entity_autocomplete'));
}
public function handleAutocomplete(Request $request, $target_type, $selection_handler, $selection_settings_key) {
$matches = [];
$input = $request->query
->get('q');
if (is_string($input) && strlen($input)) {
$tag_list = Tags::explode($input);
$typed_string = !empty($tag_list) ? mb_strtolower(array_pop($tag_list)) : '';
$selection_settings = $this->keyValue
->get($selection_settings_key, FALSE);
if ($selection_settings !== FALSE) {
$selection_settings_hash = Crypt::hmacBase64(serialize($selection_settings) . $target_type . $selection_handler, Settings::getHashSalt());
if (!hash_equals($selection_settings_hash, $selection_settings_key)) {
throw new AccessDeniedHttpException('Invalid selection settings key.');
}
}
else {
throw new AccessDeniedHttpException();
}
$entity_type_id = $request->query
->get('entity_type');
if ($entity_type_id && $this
->entityTypeManager()
->hasDefinition($entity_type_id)) {
$entity_id = $request->query
->get('entity_id');
if ($entity_id) {
$entity = $this
->entityTypeManager()
->getStorage($entity_type_id)
->load($entity_id);
if ($entity
->access('update')) {
$selection_settings['entity'] = $entity;
}
}
}
$matches = $this->matcher
->getMatches($target_type, $selection_handler, $selection_settings, $typed_string);
}
return new JsonResponse($matches);
}
}
Classes