AutocompleteController.php in Font Awesome Icons 8.2
File
src/Controller/AutocompleteController.php
View source
<?php
namespace Drupal\fontawesome\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Drupal\Component\Utility\Tags;
use Drupal\Component\Render\FormattableMarkup;
use Drupal\fontawesome\FontAwesomeManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Config\ConfigFactory;
class AutocompleteController extends ControllerBase {
protected $fontAwesomeManager;
protected $configFactory;
public static function create(ContainerInterface $container) {
$fontAwesomeManager = $container
->get('fontawesome.font_awesome_manager');
$configFactory = $container
->get('config.factory');
return new static($fontAwesomeManager, $configFactory);
}
public function __construct(FontAwesomeManagerInterface $fontAwesomeManager, ConfigFactory $config_factory) {
$this->fontAwesomeManager = $fontAwesomeManager;
$this->configFactory = $config_factory;
}
public function handleAutocomplete(Request $request) {
$results = [];
if ($input = $request->query
->get('q')) {
$typed_string = Tags::explode($input);
$typed_string = mb_strtolower(array_pop($typed_string));
$iconData = $this->fontAwesomeManager
->getIconsWithCategories();
$configuration_settings = $this->configFactory
->get('fontawesome.settings');
$activeFiles = [
'use_solid_file' => is_null($configuration_settings
->get('use_solid_file')) === TRUE ? TRUE : $configuration_settings
->get('use_solid_file'),
'use_regular_file' => is_null($configuration_settings
->get('use_regular_file')) === TRUE ? TRUE : $configuration_settings
->get('use_regular_file'),
'use_light_file' => is_null($configuration_settings
->get('use_light_file')) === TRUE ? TRUE : $configuration_settings
->get('use_light_file'),
'use_brands_file' => is_null($configuration_settings
->get('use_brands_file')) === TRUE ? TRUE : $configuration_settings
->get('use_brands_file'),
'use_duotone_file' => is_null($configuration_settings
->get('use_duotone_file')) === TRUE ? TRUE : $configuration_settings
->get('use_duotone_file'),
];
foreach ($iconData as $thisIcon) {
if (strpos($thisIcon['name'], $typed_string) === 0 || in_array($typed_string, $thisIcon['search_terms'])) {
$iconRenders = [];
foreach ($thisIcon['styles'] as $style) {
$iconPrefix = '';
switch ($style) {
case 'brands':
if (!$activeFiles['use_brands_file']) {
break;
}
$iconPrefix = 'fab';
break;
case 'light':
if (!$activeFiles['use_light_file']) {
break;
}
$iconPrefix = 'fal';
break;
case 'regular':
if (!$activeFiles['use_regular_file']) {
break;
}
$iconPrefix = 'far';
break;
case 'duotone':
if (!$activeFiles['use_duotone_file']) {
break;
}
$iconPrefix = 'fad';
break;
case 'kit_uploads':
$iconPrefix = 'fak';
break;
default:
case 'solid':
if (!$activeFiles['use_solid_file']) {
break;
}
$iconPrefix = 'fas';
break;
}
if (!empty($iconPrefix)) {
$iconRenders[] = new FormattableMarkup('<i class=":prefix fa-:icon fa-fw fa-2x"></i> ', [
':prefix' => $iconPrefix,
':icon' => $thisIcon['name'],
]);
}
}
if (count($iconRenders) == 0) {
continue;
}
$results[] = [
'value' => $thisIcon['name'],
'label' => implode('', $iconRenders) . $thisIcon['name'],
];
}
}
}
return new JsonResponse($results);
}
}