acquia_search_solr-8.x-1.0-beta9/acquia_search_solr.post_update.php

acquia_search_solr.post_update.php
<?php

/**
 * @file
 * Search Solr updates once other modules have made their own updates.
 */

use Drupal\Core\PhpStorage\PhpStorageFactory;
use Drupal\acquia_search\Helper\Storage;
use Drupal\views\Views;

/**
 * Clear cache to rebuild routes.
 */
function acquia_search_solr_post_update_clear_routes() {
  \Drupal::service("router.builder")->rebuild();
  PhpStorageFactory::get("twig")->deleteAll();
}

function acquia_search_solr_post_update_upgrade_to_acquia_searchh() {
  // Install Acquia Search if its not yet installed.
  /** @var \Drupal\Core\Extension\ModuleInstallerInterface $module_installer */
  $module_installer = \Drupal::service('module_installer');
  if (!\Drupal::moduleHandler()->moduleExists('acquia_search')) {
    $module_installer->install(['acquia_search'], TRUE);
  }

  $config_factory = \Drupal::configFactory();

  // Export settings acquia_search.
  $storage = new Storage();
  $storage->setApiHost(\Drupal::config('acquia_search_solr.settings')
      ->get('api_host') ?? 'https://api.sr-prod02.acquia.com');
  $storage->setApiKey(\Drupal::state()->get('acquia_search_solr.api_key'));
  $storage->setIdentifier(\Drupal::state()
    ->get('acquia_search_solr.identifier'));
  $storage->setUuid(\Drupal::state()
    ->get('acquia_search_solr.uuid'));

  if ($solr_search_config = $config_factory->getEditable('acquia_search_solr.settings')) {
    if ($override = $solr_search_config->get('override_search_core')) {
      $acquia_search_config = $config_factory->getEditable('acquia_search.settings');
      $acquia_search_config->set('override_search_core', $override);
      $acquia_search_config->save();
      $solr_search_config->delete();
    }
  }
  // Move current index to Acquia Search.
  $old_solr_index = $config_factory->getEditable('search_api.index.acquia_search_solr_search_api_solr_index');
  $new_solr_index = $config_factory->getEditable('search_api.index.acquia_search_index');
  $acquia_search_server = $config_factory->getEditable('search_api.server.acquia_search_server');
  if (!empty($new_solr_index) && !empty($acquia_search_server)) {
    // Update Settings within the index to match search solr
    $settings = ['third_party_settings', 'field_settings', 'datasource_settings', 'processor_settings', 'tracker_settings', 'options'];
    foreach ($settings as $setting) {
      $new_solr_index->set($setting, $old_solr_index->get($setting));
    }

    $config_dependencies = $old_solr_index->get('dependencies.config');
    // Remove server dependency from index.
    if (($key = array_search('search_api.server.acquia_search_solr_search_api_solr_server', $config_dependencies)) !== false) {
      $config_dependencies[$key] = 'search_api.server.acquia_search_server';
      $new_solr_index->set('dependencies.config', $config_dependencies);
    }
    $new_solr_index->save();

    if ($old_search_server = $config_factory->getEditable('search_api.server.acquia_search_solr_search_api_solr_server')) {
      $old_search_server->delete();
    }
    $old_solr_index->delete();
    // Delete the new view before renaming the old one
    if ($new_search_view = $config_factory->getEditable('views.view.acquia_search')) {
      $new_search_view->delete();
    }
    $config_factory->rename('views.view.acquia_search_solr', 'views.view.acquia_search');
    // Update the view's base table - Needs to be fixed.
    $old_search_view = $config_factory->getEditable('views.view.acquia_search');
    $old_search_view->set('base_table', 'search_api_index_acquia_search_index');
    $old_search_view->set('id', 'acquia_search');
    $view_display = $old_search_view->get('display');
    // Loop through the displays
    foreach ($view_display as $display_key => $display_items) {
      if (!empty($view_display[$display_key]['display_options'])) {
        foreach ($view_display[$display_key]['display_options'] as $display_options => $items) {
          if (is_array($items)) {
            foreach ($items as $key => $item) {
              if (is_array($item) && array_key_exists('table', $item)) {// echo $key; //continue;
                $view_display[$display_key]['display_options'][$display_options][$key]['table'] = 'search_api_index_acquia_search_index';
              }
            }
          }
        }
      }
    }

    $old_search_view->set('display', $view_display);
    $old_search_view->save(TRUE);
    \Drupal::service('router.builder')->setRebuildNeeded();
  }

  // Self distruct in 5, 4, 3, 2, 1...
  /** @var \Drupal\Core\Extension\ModuleInstallerInterface $module_installer */
  $module_installer = \Drupal::service('module_installer');
  $module_installer->uninstall(['acquia_search_solr']);

  \Drupal::service("router.builder")->rebuild();
  PhpStorageFactory::get("twig")->deleteAll();
  drupal_flush_all_caches();
}

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

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