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();
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc