search_api_meilisearch-1.0.x-dev/search_api_meilisearch.install
search_api_meilisearch.install
<?php
/**
* @file
* Install, update and uninstall functions for search_api_meilisearch module.
*/
use Drupal\search_api\Processor\ProcessorInterface;
use Drupal\search_api\SearchApiException;
use Drupal\search_api_meilisearch\Plugin\search_api\backend\SearchApiMeilisearchBackend;
use Drupal\search_api_meilisearch\Plugin\search_api\processor\Synonyms;
/**
* Migrate the synonyms configurations to synonyms processor config.
*/
function search_api_meilisearch_update_9001(&$sandbox) {
$storage = \Drupal::entityTypeManager()->getStorage('search_api_index');
$moduleConfig = \Drupal::configFactory()->getEditable('search_api_meilisearch.settings');
$synonymsConfig = $moduleConfig->get('meilisearch_synonyms');
if (empty($synonymsConfig)) {
return;
}
foreach ($synonymsConfig as $indexName => $settings) {
if (empty($settings)) {
continue;
}
/** @var \Drupal\search_api\IndexInterface|null $index */
$index = $storage->load($indexName);
try {
if (!$index || $index->getServerInstance()->getBackendId() !== 'search_api_meilisearch') {
continue;
}
}
catch (SearchApiException $e) {
continue;
}
$processors = $index->getProcessorsByStage(ProcessorInterface::STAGE_PREPROCESS_INDEX);
if (!isset($processors['search_api_meilisearch_synonyms'])) {
continue;
}
$indexConfig = \Drupal::configFactory()->getEditable($index->getConfigDependencyName());
$synonyms = [];
$separateSynonyms = preg_split('/\r\n|\r|\n/', $settings);
$separateSynonyms = array_map('trim', $separateSynonyms);
$separateSynonyms = array_filter($separateSynonyms, 'strlen');
foreach ($separateSynonyms as $synonym) {
[$synonymGroupName, $synonymGroupValues] = explode(Synonyms::GROUP_DELIMITER, $synonym);
$synonymValues = explode(Synonyms::SYNONYM_DELIMITER, $synonymGroupValues);
$synonymValues = array_map('trim', $synonymValues);
$synonyms[strtolower($synonymGroupName)] = array_map('strtolower', $synonymValues);
}
$data = $indexConfig->getRawData();
$data['processor_settings']['search_api_meilisearch_synonyms']['synonyms'] = $synonyms;
$indexConfig->setData($data)->save();
}
$moduleConfig->clear('meilisearch_synonyms')->save();
}
/**
* Remove the meilisearch document id mappings configuration.
*/
function search_api_meilisearch_update_9002(&$sandbox) {
$moduleConfig = \Drupal::configFactory()->getEditable('search_api_meilisearch.settings');
$mappings = $moduleConfig->get('meilisearch_id_mappings');
if (empty($mappings)) {
$moduleConfig->delete();
return;
}
$storage = \Drupal::entityTypeManager()->getStorage('search_api_index');
/** @var \Drupal\search_api\IndexInterface[] $indexes */
$indexes = $storage->loadMultiple();
if (!$indexes) {
$moduleConfig->delete();
return;
}
$indexesToReindex = [];
foreach ($indexes as $index) {
$server = $index->getServerInstance();
if (!isset($server)) {
continue;
}
$backend = $server->getBackend();
if (!$backend instanceof SearchApiMeilisearchBackend) {
continue;
}
$indexesToReindex[] = $index->id();
$index->reindex();
}
if ($indexesToReindex) {
\Drupal::messenger()->addStatus(t(
'Meilisearch indexes @indexes have been scheduled to be reindexed. Until reindexing occurs, searches for the affected indexes will not return any results.',
['@indexes' => '"' . implode('", "', $indexesToReindex) . '"']
));
}
$moduleConfig->delete();
}
