first commit

This commit is contained in:
Sven Wappler
2021-04-24 04:44:44 +02:00
parent cadcc8edb4
commit 2c9e27b3b7
55 changed files with 333 additions and 3877 deletions

View File

@@ -1,4 +1,5 @@
<?php
namespace WapplerSystems\Meilisearch;
/***************************************************************
@@ -66,9 +67,9 @@ class ConnectionManager implements SingletonInterface
/**
* @param SystemLanguageRepository $systemLanguageRepository
* @param SystemLanguageRepository|null $systemLanguageRepository
* @param PagesRepositoryAtExtMeilisearch|null $pagesRepositoryAtExtMeilisearch
* @param SiteRepository $siteRepository
* @param SiteRepository|null $siteRepository
*/
public function __construct(
SystemLanguageRepository $systemLanguageRepository = null,
@@ -77,24 +78,22 @@ class ConnectionManager implements SingletonInterface
)
{
$this->systemLanguageRepository = $systemLanguageRepository ?? GeneralUtility::makeInstance(SystemLanguageRepository::class);
$this->siteRepository = $siteRepository ?? GeneralUtility::makeInstance(SiteRepository::class);
$this->siteRepository = $siteRepository ?? GeneralUtility::makeInstance(SiteRepository::class);
$this->pagesRepositoryAtExtMeilisearch = $pagesRepositoryAtExtMeilisearch ?? GeneralUtility::makeInstance(PagesRepositoryAtExtMeilisearch::class);
}
/**
* Creates a meilisearch connection for read and write endpoints
*
* @param array $readNodeConfiguration
* @param array $writeNodeConfiguration
* @param array $siteConfiguration
* @return MeilisearchConnection|object
*/
public function getMeilisearchConnectionForNodes(array $readNodeConfiguration, array $writeNodeConfiguration)
public function getMeilisearchConnectionForNode(array $siteConfiguration)
{
$connectionHash = md5(json_encode($readNodeConfiguration) . json_encode($writeNodeConfiguration));
$connectionHash = md5(json_encode($siteConfiguration));
if (!isset(self::$connections[$connectionHash])) {
$readNode = $this->createClientFromArray($readNodeConfiguration);
$writeNode = $this->createClientFromArray($writeNodeConfiguration);
self::$connections[$connectionHash] = GeneralUtility::makeInstance(MeilisearchConnection::class, $readNode, $writeNode);
$node = $this->createClientFromArray($siteConfiguration);
self::$connections[$connectionHash] = GeneralUtility::makeInstance(MeilisearchConnection::class, $node, $siteConfiguration);
}
return self::$connections[$connectionHash];
}
@@ -107,11 +106,11 @@ class ConnectionManager implements SingletonInterface
*/
public function getConnectionFromConfiguration(array $config)
{
if(empty($config['read']) && !empty($config['meilisearchHost'])) {
if (empty($config) && !empty($config['meilisearchHost'])) {
throw new InvalidArgumentException('Invalid registry data please re-initialize your meilisearch connections');
}
return $this->getMeilisearchConnectionForNodes($config['read'], $config['write']);
return $this->getMeilisearchConnectionForNode($config);
}
/**
@@ -131,7 +130,7 @@ class ConnectionManager implements SingletonInterface
$config = $site->getMeilisearchConnectionConfiguration($language);
$meilisearchConnection = $this->getConnectionFromConfiguration($config);
return $meilisearchConnection;
} catch(InvalidArgumentException $e) {
} catch (InvalidArgumentException $e) {
$noMeilisearchConnectionException = $this->buildNoConnectionExceptionForPageAndLanguage($pageId, $language);
throw $noMeilisearchConnectionException;
}
@@ -170,7 +169,7 @@ class ConnectionManager implements SingletonInterface
{
$meilisearchConnections = [];
foreach ($this->siteRepository->getAvailableSites() as $site) {
foreach ($site->getAllMeilisearchConnectionConfigurations() as $meilisearchConfiguration) {
foreach ($site->getMeilisearchConnectionConfigurations() as $meilisearchConfiguration) {
$meilisearchConnections[] = $this->getConnectionFromConfiguration($meilisearchConfiguration);
}
}
@@ -182,18 +181,11 @@ class ConnectionManager implements SingletonInterface
* Gets all connections configured for a given site.
*
* @param Site $site A TYPO3 site
* @return MeilisearchConnection[] An array of Meilisearch connection objects (WapplerSystems\Meilisearch\System\Meilisearch\MeilisearchConnection)
* @throws NoMeilisearchConnectionFoundException
* @return MeilisearchConnection An array of Meilisearch connection objects (WapplerSystems\Meilisearch\System\Meilisearch\MeilisearchConnection)
*/
public function getConnectionsBySite(Site $site)
public function getConnectionBySite(Site $site)
{
$connections = [];
foreach ($site->getAllMeilisearchConnectionConfigurations() as $languageId => $meilisearchConnectionConfiguration) {
$connections[$languageId] = $this->getConnectionFromConfiguration($meilisearchConnectionConfiguration);
}
return $connections;
return $this->getConnectionFromConfiguration($site->getMeilisearchConnectionConfiguration());
}
/**
@@ -211,7 +203,7 @@ class ConnectionManager implements SingletonInterface
. $connection['read']['host'] . ':'
. $connection['read']['port']
. $connection['read']['path']
.' - Write node: '
. ' - Write node: '
. $connection['write']['host'] . ':'
. $connection['write']['port']
. $connection['write']['path'];
@@ -266,8 +258,9 @@ class ConnectionManager implements SingletonInterface
}
private function createClientFromArray(array $configuration) {
return new Client(($configuration['scheme'] ?? 'http') . '://'.$configuration['host'].':'.$configuration['port'], $configuration['apiKey'] ?? null, new \TYPO3\CMS\Core\Http\Client(\TYPO3\CMS\Core\Http\Client\GuzzleClientFactory::getClient()));
private function createClientFromArray(array $configuration)
{
return new Client(($configuration['scheme'] ?? 'http') . '://' . $configuration['host'] . ':' . $configuration['port'], $configuration['apiKey'] ?? null, new \TYPO3\CMS\Core\Http\Client(\TYPO3\CMS\Core\Http\Client\GuzzleClientFactory::getClient()));
}