<?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;
}
}