acquia_search-3.0.1/src/Plugin/search_api/backend/AcquiaSearchSolrBackend.php

src/Plugin/search_api/backend/AcquiaSearchSolrBackend.php
<?php

declare(strict_types=1);

namespace Drupal\acquia_search\Plugin\search_api\backend;

use Drupal\acquia_search\Helper\Messages;
use Drupal\acquia_search\Plugin\SolrConnector\SearchApiSolrAcquiaConnector;
use Drupal\acquia_search\PreferredCoreService;
use Drupal\Core\Form\FormStateInterface;
use Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Apache Solr backend for Acquia Search.
 *
 * @SearchApiBackend(
 *   id = "acquia_search_solr",
 *   label = @Translation("Acquia Search Solr"),
 *   description = @Translation("Index items using an Apache Solr search server provided by Acquia Search.")
 * )
 */
class AcquiaSearchSolrBackend extends SearchApiSolrBackend {

  /**
   * The preferred core service factory.
   *
   * @var \Drupal\acquia_search\PreferredCoreServiceFactory
   */
  protected $preferredCoreServiceFactory;

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
    $instance->preferredCoreServiceFactory = $container->get('acquia_search.preferred_core_factory');
    return $instance;
  }

  /**
   * {@inheritdoc}
   */
  public function getSolrConnector() {
    $preferred_core_service = $this->getPreferredCoreService();
    $this->configuration['connector_config'] = array_merge(
      $this->configuration['connector_config'],
      [
        'scheme' => 'https',
        'host' => $preferred_core_service->getPreferredCoreHostname() ?? 'localhost',
        'port' => '443',
        'path' => 'solr',
        'core' => $preferred_core_service->getPreferredCoreId(),
        'overridden_by_acquia_search' => SearchApiSolrAcquiaConnector::OVERRIDE_AUTO_SET,
      ]
    );
    return parent::getSolrConnector();
  }

  /**
   * Determines whether the expected core ID is available.
   *
   * @return bool
   *   True if the expected core ID available to use with Acquia.
   */
  public function isPreferredCoreAvailable(): bool {
    return $this->getPreferredCoreService()->isPreferredCoreAvailable();
  }

  /**
   * Checks if the core is read-only.
   *
   * @return bool
   *   Read Only Status.
   */
  public function isReadOnly(): bool {
    return $this->getPreferredCoreService()->isReadOnly();
  }

  /**
   * Gets a list of all possible search core IDs.
   *
   * @return array
   *   The array of core IDs.
   */
  public function getListOfPossibleCores(): array {
    return $this->getPreferredCoreService()->getListOfPossibleCores();
  }

  /**
   * Returns a formatted list of Available cores.
   *
   * @return array
   *   The array of core IDs.
   */
  public function getListOfAvailableCores(): array {
    return $this->getPreferredCoreService()->getListOfAvailableCores();
  }

  /**
   * Gets an instance of the preferred core service for this backend.
   *
   * @return \Drupal\acquia_search\PreferredCoreService
   *   The preferred core service for this backend.
   */
  private function getPreferredCoreService(): PreferredCoreService {
    return $this->preferredCoreServiceFactory->get($this->server);
  }

  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    $defaults = parent::defaultConfiguration();
    $defaults['connector'] = 'solr_acquia_connector';
    return $defaults;
  }

  /**
   * {@inheritdoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $form['#entity_id'] = $this->getServer()->id();
    $form = parent::buildConfigurationForm($form, $form_state);
    $form['connector']['#options'] = array_filter(
      $form['connector']['#options'],
      static fn (string $plugin_id) => $plugin_id === 'solr_acquia_connector',
      ARRAY_FILTER_USE_KEY
    );
    $form['connector']['#disabled'] = TRUE;

    // Match defaults in add form to the Acquia Search server defaults.
    if ($this->server->id() === NULL) {
      $form['multisite']['site_hash']['#default_value'] = TRUE;
      $form['advanced']['retrieve_data']['#default_value'] = TRUE;
      $form['advanced']['highlight_data']['#default_value'] = TRUE;
    }

    if (!$this->server->isNew() && !$this->isPreferredCoreAvailable()) {
      // Show "could not find preferred core" message.
      Messages::showNoPreferredCoreError($this);
    }
    return $form;
  }

}

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

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