167 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			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();
 | 
						|
    }
 | 
						|
}
 |