Skip to content
Snippets Groups Projects

Enhancing string matching with transliteration

@@ -4,6 +4,7 @@ namespace Drupal\views_json_source\Plugin\views\query;
@@ -4,6 +4,7 @@ namespace Drupal\views_json_source\Plugin\views\query;
use Drupal\Component\Datetime\TimeInterface;
use Drupal\Component\Datetime\TimeInterface;
use Drupal\Component\Serialization\Json;
use Drupal\Component\Serialization\Json;
 
use Drupal\Component\Transliteration\TransliterationInterface;
use Drupal\Component\Utility\NestedArray;
use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
@@ -123,10 +124,17 @@ class ViewsJsonQuery extends QueryPluginBase {
@@ -123,10 +124,17 @@ class ViewsJsonQuery extends QueryPluginBase {
*/
*/
public $filter = [];
public $filter = [];
 
/**
 
* Transliteration service.
 
*
 
* @var \Drupal\Component\Transliteration\TransliterationInterface
 
*/
 
protected $transliteration;
 
/**
/**
* {@inheritdoc}
* {@inheritdoc}
*/
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, ConfigFactoryInterface $config, CacheBackendInterface $cache, TimeInterface $time, EventDispatcherInterface $event_dispatcher, ClientInterface $http_client, Token $token, LoggerInterface $logger) {
public function __construct(array $configuration, $plugin_id, $plugin_definition, ConfigFactoryInterface $config, CacheBackendInterface $cache, TimeInterface $time, EventDispatcherInterface $event_dispatcher, ClientInterface $http_client, Token $token, LoggerInterface $logger, TransliterationInterface $transliteration) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->config = $config;
$this->config = $config;
@@ -136,6 +144,7 @@ class ViewsJsonQuery extends QueryPluginBase {
@@ -136,6 +144,7 @@ class ViewsJsonQuery extends QueryPluginBase {
$this->httpClient = $http_client;
$this->httpClient = $http_client;
$this->token = $token;
$this->token = $token;
$this->logger = $logger;
$this->logger = $logger;
 
$this->transliteration = $transliteration;
}
}
/**
/**
@@ -152,7 +161,8 @@ class ViewsJsonQuery extends QueryPluginBase {
@@ -152,7 +161,8 @@ class ViewsJsonQuery extends QueryPluginBase {
$container->get('event_dispatcher'),
$container->get('event_dispatcher'),
$container->get('http_client'),
$container->get('http_client'),
$container->get('token'),
$container->get('token'),
$container->get('logger.channel.views_json_source')
$container->get('logger.channel.views_json_source'),
 
$container->get('transliteration')
);
);
}
}
@@ -347,6 +357,10 @@ class ViewsJsonQuery extends QueryPluginBase {
@@ -347,6 +357,10 @@ class ViewsJsonQuery extends QueryPluginBase {
* Define ops for using in filter.
* Define ops for using in filter.
*/
*/
public function ops($op, $l, $r) {
public function ops($op, $l, $r) {
 
// Transliterate values before comparison.
 
$l = $this->transliterateValue($l);
 
$r = $this->transliterateValue($r);
 
$table = [
$table = [
'=' => function ($l, $r) {
'=' => function ($l, $r) {
return $l == $r;
return $l == $r;
@@ -388,6 +402,13 @@ class ViewsJsonQuery extends QueryPluginBase {
@@ -388,6 +402,13 @@ class ViewsJsonQuery extends QueryPluginBase {
return array_key_exists($op, $table) ? call_user_func($table[$op], $l, $r) : FALSE;
return array_key_exists($op, $table) ? call_user_func($table[$op], $l, $r) : FALSE;
}
}
 
/**
 
* Transliterate.
 
*/
 
protected function transliterateValue($value) {
 
return $this->transliteration->transliterate($value);
 
}
 
/**
/**
* Parse.
* Parse.
*/
*/
Loading