class FacController in Fast Autocomplete 8
Fast Autocomplete controller class.
@package Drupal\fac\Controller
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements ContainerInjectionInterface uses LoggerChannelTrait, MessengerTrait, LinkGeneratorTrait, RedirectDestinationTrait, UrlGeneratorTrait, StringTranslationTrait
- class \Drupal\fac\Controller\FacController
Expanded class hierarchy of FacController
File
- src/
Controller/ FacController.php, line 24
Namespace
Drupal\fac\ControllerView source
class FacController extends ControllerBase {
/**
* The search service.
*
* @var \Drupal\fac\SearchService
*/
protected $searchService;
/**
* The hash service.
*
* @var \Drupal\fac\HashServiceInterface
*/
protected $hashService;
/**
* The entity type manager service.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $storage;
/**
* The language manager service.
*
* @var \Drupal\Core\Language\LanguageManagerInterface
*/
protected $languageManager;
/**
* The account switcher service.
*
* @var \Drupal\Core\Session\AccountSwitcherInterface
*/
protected $accountSwitcher;
/**
* The logger service.
*
* @var \Drupal\Core\Logger\LoggerChannelInterface
*/
protected $logger;
/**
* The file system service.
*
* @var \Drupal\Core\File\FileSystemInterface
*/
protected $fileSystem;
/**
* {@inheritdoc}
*/
public function __construct(SearchService $search_service, HashServiceInterface $hash_service, EntityTypeManagerInterface $storage, LanguageManagerInterface $language_manager, AccountSwitcherInterface $account_switcher, LoggerChannelFactoryInterface $logger_factory, FileSystemInterface $file_system) {
$this->searchService = $search_service;
$this->hashService = $hash_service;
$this->storage = $storage;
$this->languageManager = $language_manager;
$this->accountSwitcher = $account_switcher;
$this->logger = $logger_factory
->get('fac');
$this->fileSystem = $file_system;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container
->get('fac.search_service'), $container
->get('fac.hash_service'), $container
->get('entity_type.manager'), $container
->get('language_manager'), $container
->get('account_switcher'), $container
->get('logger.factory'), $container
->get('file_system'));
}
/**
* Generates the Fast Autocomplete JSON for a search query.
*
* @param string $fac_config_id
* The Fast Autocomplete configuration entity id.
* @param string $langcode
* The language code to generate the Json for.
* @param string $hash
* The hash to check.
* @param string $key
* The key to search with.
*
* @return \Symfony\Component\HttpFoundation\JsonResponse
* The JSON response.
*
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
*/
public function generateJson($fac_config_id, $langcode, $hash, $key) {
try {
// Check if the provided fac_config_id exists.
/** @var \Drupal\fac\Entity\FacConfig $fac_config */
if ($fac_config = $this->storage
->getStorage('fac_config')
->load($fac_config_id)) {
// Check if the specific Fast Autocomplete configuration is enabled.
if ($fac_config
->status()) {
$languages = $this->languageManager
->getLanguages();
// Check if the language code is valid.
if (in_array($langcode, array_keys($languages))) {
$response = NULL;
// Switch to the anonymous user if configured.
if ($fac_config
->anonymousSearch()) {
/** @var \Drupal\user\UserInterface $anonymous_user */
$anonymous_user = $this->storage
->getStorage('user')
->load(0);
$this->accountSwitcher
->switchTo($anonymous_user);
}
// Check if the hash is valid.
if ($this->hashService
->isValidHash($hash)) {
// Remove the .json part from the key.
$key = preg_replace('/\\.json$/', '', $key);
// Check the key length.
if (strlen($key) <= $fac_config
->getKeyMaxLength()) {
// Replace all underscores by spaces for the search key.
$search_key = preg_replace('/_/', ' ', $key);
// Get the search results.
$results['items'] = $this->searchService
->getResults($fac_config, $langcode, $search_key);
// Put the results in a json file in the public files folder.
$directory = PublicStream::basePath() . '/fac-json/' . $fac_config_id . '/' . $langcode . '/' . $this->hashService
->getHash();
if ($this->fileSystem
->prepareDirectory($directory, FileSystemInterface::CREATE_DIRECTORY)) {
$destination = $directory . '/' . $key . '.json';
$this->fileSystem
->saveData(json_encode($results), $destination, FileSystemInterface::EXISTS_REPLACE);
}
// Set the response.
$response = new JsonResponse($results);
}
}
// Switch back to the original user if switched to user 0.
if ($fac_config
->anonymousSearch()) {
$this->accountSwitcher
->switchBack();
}
if (!is_null($response)) {
return $response;
}
}
}
}
} catch (InvalidPluginDefinitionException $e) {
$this->logger
->error('An error occurred: ' . $e
->getMessage());
}
// If no response was returned, throw a NotFoundHttpException.
throw new NotFoundHttpException();
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ControllerBase:: |
protected | property | The configuration factory. | |
ControllerBase:: |
protected | property | The current user service. | 1 |
ControllerBase:: |
protected | property | The entity form builder. | |
ControllerBase:: |
protected | property | The entity manager. | |
ControllerBase:: |
protected | property | The entity type manager. | |
ControllerBase:: |
protected | property | The form builder. | 2 |
ControllerBase:: |
protected | property | The key-value storage. | 1 |
ControllerBase:: |
protected | property | The module handler. | 2 |
ControllerBase:: |
protected | property | The state service. | |
ControllerBase:: |
protected | function | Returns the requested cache bin. | |
ControllerBase:: |
protected | function | Retrieves a configuration object. | |
ControllerBase:: |
private | function | Returns the service container. | |
ControllerBase:: |
protected | function | Returns the current user. | 1 |
ControllerBase:: |
protected | function | Retrieves the entity form builder. | |
ControllerBase:: |
protected | function | Retrieves the entity manager service. | |
ControllerBase:: |
protected | function | Retrieves the entity type manager. | |
ControllerBase:: |
protected | function | Returns the form builder service. | 2 |
ControllerBase:: |
protected | function | Returns a key/value storage collection. | 1 |
ControllerBase:: |
protected | function | Returns the language manager service. | 1 |
ControllerBase:: |
protected | function | Returns the module handler. | 2 |
ControllerBase:: |
protected | function |
Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait:: |
|
ControllerBase:: |
protected | function | Returns the state storage service. | |
FacController:: |
protected | property | The account switcher service. | |
FacController:: |
protected | property | The file system service. | |
FacController:: |
protected | property | The hash service. | |
FacController:: |
protected | property |
The language manager service. Overrides ControllerBase:: |
|
FacController:: |
protected | property | The logger service. | |
FacController:: |
protected | property | The search service. | |
FacController:: |
protected | property | The entity type manager service. | |
FacController:: |
public static | function |
Instantiates a new instance of this class. Overrides ControllerBase:: |
|
FacController:: |
public | function | Generates the Fast Autocomplete JSON for a search query. | |
FacController:: |
public | function | ||
LinkGeneratorTrait:: |
protected | property | The link generator. | 1 |
LinkGeneratorTrait:: |
protected | function | Returns the link generator. | |
LinkGeneratorTrait:: |
protected | function | Renders a link to a route given a route name and its parameters. | |
LinkGeneratorTrait:: |
public | function | Sets the link generator service. | |
LoggerChannelTrait:: |
protected | property | The logger channel factory service. | |
LoggerChannelTrait:: |
protected | function | Gets the logger for a specific channel. | |
LoggerChannelTrait:: |
public | function | Injects the logger channel factory. | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
RedirectDestinationTrait:: |
protected | property | The redirect destination service. | 1 |
RedirectDestinationTrait:: |
protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |
RedirectDestinationTrait:: |
protected | function | Returns the redirect destination service. | |
RedirectDestinationTrait:: |
public | function | Sets the redirect destination service. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
UrlGeneratorTrait:: |
protected | property | The url generator. | |
UrlGeneratorTrait:: |
protected | function | Returns the URL generator service. | |
UrlGeneratorTrait:: |
public | function | Sets the URL generator service. | |
UrlGeneratorTrait:: |
protected | function | Generates a URL or path for a specific route based on the given parameters. |