php_ServerSettings.php

<?php

namespace FindStr;

use MeiliSearch\Client;

class ServerSettings {

  private object $settings;

  public function update( $server_settings ) {

    $server_settings = json_decode( wp_json_encode( $server_settings ) );

    if ( empty( $server_settings->serverUrl ) ) {
      return new \WP_Error( 'meilisearch_error', 'Server Url is missing' );
    }

    $server_settings->serverUrl = trailingslashit( $server_settings->serverUrl );

    if ( empty( $server_settings->privateKey ) ) {
        return new \WP_Error( 'meilisearch_error', 'Private Key is missing' );
    }

    $http_client = new \GuzzleHttp\Client(
      array(
        'timeout' => 10,
        'verify'  => false,
      )
    );

    try {
        $client                               = new Client(
          $server_settings->serverUrl,
          $server_settings->privateKey,
          $http_client
        );
        $version                              = $client->version();
        $server_settings->meilisearch_version = $version;
    } catch ( \Exception $exception ) {
        return new \WP_Error( 'meilisearch_error', 'Error with server or private key : ' . $exception->getMessage() );
    }

    try {
        $client = new Client( $server_settings->serverUrl, $server_settings->publicKey, $http_client );
        $index  = $client->index( $server_settings->indexUID );

        $index->search( '' );
    } catch ( \Exception $exception ) {
        return new \WP_Error( 'meilisearch_error_index', 'Error with public key : ' . $exception->getMessage() );
    }

      update_option( 'findstrServerSettings', $server_settings );

      $this->settings = $server_settings;

      return $server_settings;
  }

  public function get( $option_name = '' ) {

    global $findstr_server_settings;
    if ( empty( $findstr_server_settings ) ) {

      if ( defined( 'FINDSTR_SERVER_SETTINGS' ) ) {
        $findstr_server_settings = json_decode( wp_json_encode( FINDSTR_SERVER_SETTINGS, JSON_PRETTY_PRINT ), false );

        $findstr_server_settings->defined_in_file = true;
      }

      if ( empty( $findstr_server_settings ) ) {
        $findstr_server_settings = get_option( 'findstrServerSettings' );
      }

      if ( ! empty( $findstr_server_settings ) ) {

        /**
         * Filter the server settings
         *
         * @hook findstr_server_settings
         *
         * @param {object} $findstr_server_settings
         *
         * @return {object} $findstr_server_settings
         */
        $this->settings = apply_filters( 'findstr_server_settings', $findstr_server_settings );

        $this->settings->serverUrl = trailingslashit( $this->settings->serverUrl );

        if ( ! empty( $option_name ) ) {
          return $this->settings->{$option_name};
        }

        return $this->settings;
      }

      return false;
    }

    return apply_filters( 'findstr_server_settings', $findstr_server_settings );
  }

  public function get_meilisearch_version() {

    $transient_key = 'findstr_meilisearch_version';
    $version       = get_transient( $transient_key );

    if ( empty( $version ) ) {

      $server_settings = $this->get();
      if ( empty( $server_settings ) ) {
        return new \WP_Error( 'meilisearch_error', 'Server settings are missing' );
      }

      $http_client = new \GuzzleHttp\Client(
        array(
          'timeout' => 10,
          'verify'  => false,
        )
      );

      try {
        $client  = new Client(
          $server_settings->serverUrl,
          $server_settings->privateKey,
          $http_client
        );
        $version = $client->version();
      } catch ( \Exception $exception ) {
        return 0;
      }

      set_transient( $transient_key, $version, DAY_IN_SECONDS );
    }

    return $version;
  }

}