FacController.php in Fast Autocomplete 8
File
src/Controller/FacController.php
View source
<?php
namespace Drupal\fac\Controller;
use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\File\FileSystemInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\Logger\LoggerChannelFactoryInterface;
use Drupal\Core\Session\AccountSwitcherInterface;
use Drupal\Core\StreamWrapper\PublicStream;
use Drupal\fac\SearchService;
use Drupal\fac\HashServiceInterface;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class FacController extends ControllerBase {
protected $searchService;
protected $hashService;
protected $storage;
protected $languageManager;
protected $accountSwitcher;
protected $logger;
protected $fileSystem;
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;
}
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'));
}
public function generateJson($fac_config_id, $langcode, $hash, $key) {
try {
if ($fac_config = $this->storage
->getStorage('fac_config')
->load($fac_config_id)) {
if ($fac_config
->status()) {
$languages = $this->languageManager
->getLanguages();
if (in_array($langcode, array_keys($languages))) {
$response = NULL;
if ($fac_config
->anonymousSearch()) {
$anonymous_user = $this->storage
->getStorage('user')
->load(0);
$this->accountSwitcher
->switchTo($anonymous_user);
}
if ($this->hashService
->isValidHash($hash)) {
$key = preg_replace('/\\.json$/', '', $key);
if (strlen($key) <= $fac_config
->getKeyMaxLength()) {
$search_key = preg_replace('/_/', ' ', $key);
$results['items'] = $this->searchService
->getResults($fac_config, $langcode, $search_key);
$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);
}
$response = new JsonResponse($results);
}
}
if ($fac_config
->anonymousSearch()) {
$this->accountSwitcher
->switchBack();
}
if (!is_null($response)) {
return $response;
}
}
}
}
} catch (InvalidPluginDefinitionException $e) {
$this->logger
->error('An error occurred: ' . $e
->getMessage());
}
throw new NotFoundHttpException();
}
}