meilisearch/Classes/System/Solr/Node.php
2021-04-17 00:26:33 +02:00

167 lines
4.7 KiB
PHP

<?php
namespace WapplerSystems\Meilisearch\System\Solr;
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
use Solarium\Core\Client\Endpoint;
/**
* Represent a server node of solr, in the most setups you would only have one, but sometimes
* multiple for reading and writing.
*
* @author Timo Hund <timo.hund@dkd.de>
* @copyright Copyright (c) 2009-2020 Timo Hund <timo.hund@dkd.de>
*
* @deprecated Class will removed with Ext:solr 12.x. Use class \Solarium\Core\Client\Endpoint instead.
*/
class Node extends Endpoint
{
/**
* Node constructor.
* @param string $scheme
* @param string $host
* @param int $port
* @param string $path
* @param ?string $username
* @param ?string $password
*/
public function __construct(
string $scheme = 'http',
string $host = 'localhost',
int $port = 8983,
string $path = '/solr/core_en/',
?string $username = null,
?string $password = null
) {
$path = (string)$path;
$elements = explode('/', trim($path, '/'));
$coreName = (string)array_pop($elements);
// Remove API version
array_pop($elements);
// The path should always have the same format!
$path = trim(implode('/', $elements), '/');
$options = [
'scheme' => $scheme,
'host' => $host,
'port' => $port,
'path' => '/' . $path,
'collection' => null,
'core' => $coreName,
'leader' => false,
];
parent::__construct($options);
$this->setAuthentication($username, $password);
}
/**
* @param array $configuration
* @return Node
*/
public static function fromArray(array $configuration): Node
{
static::checkIfRequiredKeyIsSet($configuration, 'scheme');
static::checkIfRequiredKeyIsSet($configuration, 'host');
static::checkIfRequiredKeyIsSet($configuration, 'port');
static::checkIfRequiredKeyIsSet($configuration, 'path');
$scheme = $configuration['scheme'];
$host = $configuration['host'];
$port = $configuration['port'];
$path = $configuration['path'];
$username = $configuration['username'] ?? '';
$password = $configuration['password'] ?? '';
return new Node($scheme, $host, $port, $path, $username, $password);
}
/**
* Checks if the required configuration option is set.
*
* @param array $configuration
* @param string $name
* @throws |UnexpectedValueException
*/
protected static function checkIfRequiredKeyIsSet(array $configuration, string $name)
{
if (empty($configuration[$name])) {
throw new \UnexpectedValueException('Required solr connection property ' . $name. ' is missing.');
}
}
/**
* @return string
*/
public function getUsername(): string
{
return (string)$this->getOption('username');
}
/**
* @return string
*/
public function getPassword(): string
{
return (string)$this->getOption('password');
}
/**
* Returns the path including api path.
*
* @return string
*/
public function getCoreBasePath(): string
{
$pathWithoutLeadingAndTrailingSlashes = trim(trim($this->getPath()), "/");
$pathWithoutLastSegment = substr($pathWithoutLeadingAndTrailingSlashes, 0, strrpos($pathWithoutLeadingAndTrailingSlashes, "/"));
return ($pathWithoutLastSegment === '') ? '/' : '/' . $pathWithoutLastSegment . '/';
}
/**
* Returns the core name from the configured path.
*
* @return string
* @deprecated Will be remove with Ext:solr 12.x. Use method getCore() instead.
*/
public function getCoreName(): string
{
return $this->getCore();
}
/**
* @return array
*/
public function getSolariumClientOptions(): array
{
return [
'host' => $this->getHost(),
'port' => $this->getPort(),
'scheme' => $this->getScheme(),
'path' => $this->getPath(),
'core' => $this->getCore()
];
}
/**
* @return string
* @deprecated Will be removed with Ext:solr 12.x. Use methods getCoreBaseUri() for API version 1 instead
*/
public function __toString(): string
{
return $this->getCoreBaseUri();
}
}