acquia_search-3.0.1/src/Helper/Messages.php

src/Helper/Messages.php
<?php

namespace Drupal\acquia_search\Helper;

use Drupal\acquia_search\Plugin\search_api\backend\AcquiaSearchSolrBackend;
use Drupal\acquia_search\Plugin\SolrConnector\SearchApiSolrAcquiaConnector;
use Drupal\Component\Utility\DeprecationHelper;
use Drupal\Core\Render\Markup;
use Drupal\Core\Site\Settings;
use Drupal\Core\StringTranslation\TranslatableMarkup;

/**
 * Class Messages.
 *
 * Contains methods related to the UI messages.
 *
 * @todo make a service
 * @todo test directly.
 */
class Messages {

  /**
   * Generates DSM with read-only message warning.
   */
  public static function showReadOnlyModeWarning() {

    $message = Messages::getReadOnlyModeWarning();

    \Drupal::messenger()->addWarning($message);

  }

  /**
   * Generates DSM with "could not find preferred core" message warning.
   *
   * @param \Drupal\acquia_search\Plugin\search_api\backend\AcquiaSearchSolrBackend $backend
   *   The backend.
   */
  public static function showNoPreferredCoreError(AcquiaSearchSolrBackend $backend) {

    $message = Messages::getNoPreferredCoreError($backend);

    \Drupal::messenger()->addWarning(Markup::create($message));

  }

  /**
   * Returns formatted message if preferred search core is unavailable.
   *
   * @param \Drupal\acquia_search\Plugin\search_api\backend\AcquiaSearchSolrBackend $backend
   *   The backend.
   *
   * @return string
   *   Formatted message.
   */
  public static function getNoPreferredCoreError(AcquiaSearchSolrBackend $backend): string {
    $possible_cores = $backend->getListOfPossibleCores();

    $messages[] = t('Could not find a Solr core corresponding to your website and environment.');

    if (!empty($possible_cores)) {
      $messages[] = t(
        'These cores were expected but not found in your subscription: @list.',
        ['@list' => implode(', ', $possible_cores)]
      );
    }

    $available_cores = $backend->getListOfAvailableCores();
    if (!empty($available_cores)) {
      $messages[] = t(
        'Your subscription contains these cores: @list.',
        ['@list' => implode(', ', $available_cores)]
      );
    }
    else {
      $messages[] = t('Your subscription contains no cores.');
    }

    $messages[] = t(
      'To fix this problem, please read <a href="@url">our documentation</a>.',
      ['@url' => 'https://docs.acquia.com/acquia-search/multiple-cores/']
    );

    return implode(' ', $messages);

  }

  /**
   * Returns formatted message about read-only mode.
   *
   * @return string
   *   Formatted message about read-only mode.
   */
  public static function getReadOnlyModeWarning(): string {

    return (string) t('The read-only mode is set for this server in the configuration of the Acquia Search module.');

  }

  /**
   * Returns formatted message about Acquia Search connection details.
   *
   * @param \Drupal\acquia_search\Plugin\search_api\backend\AcquiaSearchSolrBackend $backend
   *   The backend.
   *
   * @return \Drupal\Component\Render\MarkupInterface|string
   *   Formatted message about Acquia Search connection details.
   *
   * @throws \Drupal\Component\Plugin\Exception\PluginException
   * @throws \Drupal\search_api\SearchApiException
   */
  public static function getSearchStatusMessage(AcquiaSearchSolrBackend $backend) {

    /** @var \Drupal\acquia_search\Plugin\search_api\backend\AcquiaSearchSolrBackend $backend */
    $configuration = $backend->getSolrConnector()->getConfiguration();

    $items = [
      self::getServerIdMessage($backend->getServer()->id()),
    ];

    if ($backend->isPreferredCoreAvailable()) {
      $items[] = self::getServerUrlMessage($configuration);

      // Report on the behavior chosen.
      $search_settings = Settings::get('acquia_search');
      if (isset($search_settings['server_overrides'][$backend->getServer()->id()])) {
        $items[] = t('Search core configuration is being overridden by settings.php: %settings',
          ['%settings' => '$settings[\'acquia_search\'][\'server_overrides\'][\'' . $backend->getServer()->id() . '\']']);
      }
      elseif (isset($configuration['overridden_by_acquia_search'])) {
        $items[] = self::getOverriddenModeMessage($configuration['overridden_by_acquia_search']);
      }

      $items[] = self::getServerAvailabilityMessage($backend);
      $items[] = self::getServerAuthCheckMessage($backend);
    }
    else {
      $items[] = ['#markup' => '<span class="color-error">' . self::getNoPreferredCoreError($backend) . '</span>'];
    }

    $list = ['#theme' => 'item_list', '#items' => $items];
    /** @var \Drupal\Core\Render\RendererInterface $renderer */
    $renderer = \Drupal::service('renderer');
    $output = class_exists(DeprecationHelper::class) ? DeprecationHelper::backwardsCompatibleCall(
      \Drupal::VERSION,
      '10.3',
      fn() => $renderer->renderInIsolation($list),
      fn() => $renderer->renderPlain($list),
    ) : $renderer->renderPlain($list);
    $list = $output;
    return t('Connection managed by Acquia Search module. @list', [
      '@list' => $list,
    ]);

  }

  /**
   * Get text describing the current override mode.
   *
   * @param int $override
   *   Override mode. Read-only or core auto selected.
   *
   * @return array|\Drupal\Core\StringTranslation\TranslatableMarkup
   *   Text describing the current override mode.
   */
  public static function getOverriddenModeMessage(int $override) {

    switch ($override) {
      case SearchApiSolrAcquiaConnector::READ_ONLY:
        return ['#markup' => '<span class="color-warning">' . t('Acquia Search Solr module automatically enforced read-only mode on this connection.') . '</span>'];

      case SearchApiSolrAcquiaConnector::OVERRIDE_AUTO_SET:
        return t('Acquia Search Solr module automatically selected the proper Solr connection based on the detected environment and configuration.');

    }

  }

  /**
   * Get text showing the current URL based on configuration.
   *
   * @param array $configuration
   *   A configuration array containing scheme, host, port and path.
   *
   * @return \Drupal\Core\StringTranslation\TranslatableMarkup
   *   Translatable markup showing the current URL based on configuration.
   */
  public static function getServerUrlMessage(array $configuration): TranslatableMarkup {

    if (empty($configuration['host'])) {
      $url = t('N/A');
    }
    else {
      $url = $configuration['scheme'] . '://' . $configuration['host'] . ':' . $configuration['port'] . '/' . $configuration['path'] . '/' . $configuration['core'];
    }

    return t('URL: @url', ['@url' => $url]);

  }

  /**
   * Get text describing current server ID.
   *
   * @param string|int|null $server_id
   *   Server ID.
   *
   * @return \Drupal\Core\StringTranslation\TranslatableMarkup
   *   Translatable markup describing current server.
   */
  public static function getServerIdMessage($server_id): TranslatableMarkup {
    return t('search_api_solr.module server ID: @id', ['@id' => $server_id]);
  }

  /**
   * Get text describing availability for the given server.
   *
   * @param \Drupal\acquia_search\Plugin\search_api\backend\AcquiaSearchSolrBackend $backend
   *   The backend.
   *
   * @return array|\Drupal\Core\StringTranslation\TranslatableMarkup
   *   Solr server availability message.
   */
  public static function getServerAvailabilityMessage(AcquiaSearchSolrBackend $backend) {

    if ($backend->getSolrConnector()->pingCore()) {
      return t('Solr core is currently reachable and up.');
    }

    return [
      '#markup' => '<span class="color-error">' . t('Solr core is currently unreachable.') . '</span>',
    ];

  }

  /**
   * Get message describing authentication status for the given server.
   *
   * @param \Drupal\acquia_search\Plugin\search_api\backend\AcquiaSearchSolrBackend $backend
   *   The backend.
   *
   * @return array|\Drupal\Core\StringTranslation\TranslatableMarkup
   *   Solr server authentication status message.
   */
  public static function getServerAuthCheckMessage(AcquiaSearchSolrBackend $backend) {

    if ($backend->getSolrConnector()->pingServer()) {
      return t('Requests to Solr core are passing authentication checks.');
    }

    return [
      '#markup' => '<span class="color-error">' . t('Solr core authentication check fails.') . '</span>',
    ];

  }

}

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

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