first commit
This commit is contained in:
@@ -26,7 +26,7 @@ namespace WapplerSystems\Meilisearch\Domain\Site;
|
||||
***************************************************************/
|
||||
|
||||
use WapplerSystems\Meilisearch\Domain\Index\Queue\RecordMonitor\Helper\ConfigurationAwareRecordService;
|
||||
use WapplerSystems\Meilisearch\NoSolrConnectionFoundException;
|
||||
use WapplerSystems\Meilisearch\NoMeilisearchConnectionFoundException;
|
||||
use WapplerSystems\Meilisearch\System\Configuration\TypoScriptConfiguration;
|
||||
use WapplerSystems\Meilisearch\System\Records\Pages\PagesRepository;
|
||||
use TYPO3\CMS\Backend\Utility\BackendUtility;
|
||||
@@ -128,11 +128,11 @@ abstract class Site implements SiteInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the site's Solr TypoScript configuration (plugin.tx_meilisearch.*)
|
||||
* Gets the site's Meilisearch TypoScript configuration (plugin.tx_meilisearch.*)
|
||||
*
|
||||
* @return \WapplerSystems\Meilisearch\System\Configuration\TypoScriptConfiguration The Solr TypoScript configuration
|
||||
* @return \WapplerSystems\Meilisearch\System\Configuration\TypoScriptConfiguration The Meilisearch TypoScript configuration
|
||||
*/
|
||||
public function getSolrConfiguration()
|
||||
public function getMeilisearchConfiguration()
|
||||
{
|
||||
return $this->configuration;
|
||||
}
|
||||
@@ -167,12 +167,12 @@ abstract class Site implements SiteInterface
|
||||
|
||||
$configurationAwareRecordService = GeneralUtility::makeInstance(ConfigurationAwareRecordService::class);
|
||||
// Fetch configuration in order to be able to read initialPagesAdditionalWhereClause
|
||||
$solrConfiguration = $this->getSolrConfiguration();
|
||||
$indexQueueConfigurationName = $configurationAwareRecordService->getIndexingConfigurationName('pages', $this->rootPage['uid'], $solrConfiguration);
|
||||
$meilisearchConfiguration = $this->getMeilisearchConfiguration();
|
||||
$indexQueueConfigurationName = $configurationAwareRecordService->getIndexingConfigurationName('pages', $this->rootPage['uid'], $meilisearchConfiguration);
|
||||
if ($indexQueueConfigurationName === null) {
|
||||
return $pageIds;
|
||||
}
|
||||
$initialPagesAdditionalWhereClause = $solrConfiguration->getInitialPagesAdditionalWhereClause($indexQueueConfigurationName);
|
||||
$initialPagesAdditionalWhereClause = $meilisearchConfiguration->getInitialPagesAdditionalWhereClause($indexQueueConfigurationName);
|
||||
return array_merge($pageIds, $this->pagesRepository->findAllSubPageIdsByRootPage($rootPageId, $maxDepth, $initialPagesAdditionalWhereClause));
|
||||
}
|
||||
|
||||
@@ -241,26 +241,26 @@ abstract class Site implements SiteInterface
|
||||
|
||||
/**
|
||||
* @return array
|
||||
* @throws NoSolrConnectionFoundException
|
||||
* @throws NoMeilisearchConnectionFoundException
|
||||
*/
|
||||
public function getAllSolrConnectionConfigurations(): array {
|
||||
public function getAllMeilisearchConnectionConfigurations(): array {
|
||||
$configs = [];
|
||||
foreach ($this->getAvailableLanguageIds() as $languageId) {
|
||||
try {
|
||||
$configs[$languageId] = $this->getSolrConnectionConfiguration($languageId);
|
||||
} catch (NoSolrConnectionFoundException $e) {}
|
||||
$configs[$languageId] = $this->getMeilisearchConnectionConfiguration($languageId);
|
||||
} catch (NoMeilisearchConnectionFoundException $e) {}
|
||||
}
|
||||
return $configs;
|
||||
}
|
||||
|
||||
public function isEnabled(): bool
|
||||
{
|
||||
return !empty($this->getAllSolrConnectionConfigurations());
|
||||
return !empty($this->getAllMeilisearchConnectionConfigurations());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $languageId
|
||||
* @return array
|
||||
*/
|
||||
abstract function getSolrConnectionConfiguration(int $language = 0): array;
|
||||
abstract function getMeilisearchConnectionConfiguration(int $language = 0): array;
|
||||
}
|
||||
|
@@ -40,8 +40,8 @@ class SiteHashService
|
||||
/**
|
||||
* Resolves magic keywords in allowed sites configuration.
|
||||
* Supported keywords:
|
||||
* __solr_current_site - The domain of the site the query has been started from
|
||||
* __current_site - Same as __solr_current_site
|
||||
* __meilisearch_current_site - The domain of the site the query has been started from
|
||||
* __current_site - Same as __meilisearch_current_site
|
||||
* __all - Adds all domains as allowed sites
|
||||
* * - Means all sites are allowed, same as no siteHash
|
||||
*
|
||||
@@ -56,8 +56,8 @@ class SiteHashService
|
||||
} elseif ($allowedSitesConfiguration === '*') {
|
||||
return '*';
|
||||
} else {
|
||||
// we thread empty allowed site configurations as __solr_current_site since this is the default behaviour
|
||||
$allowedSitesConfiguration = empty($allowedSitesConfiguration) ? '__solr_current_site' : $allowedSitesConfiguration;
|
||||
// we thread empty allowed site configurations as __meilisearch_current_site since this is the default behaviour
|
||||
$allowedSitesConfiguration = empty($allowedSitesConfiguration) ? '__meilisearch_current_site' : $allowedSitesConfiguration;
|
||||
return $this->getDomainByPageIdAndReplaceMarkers($pageId, $allowedSitesConfiguration);
|
||||
}
|
||||
}
|
||||
@@ -98,7 +98,7 @@ class SiteHashService
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the domain of the site that belongs to the passed pageId and replaces their markers __solr_current_site
|
||||
* Retrieves the domain of the site that belongs to the passed pageId and replaces their markers __meilisearch_current_site
|
||||
* and __current_site.
|
||||
*
|
||||
* @param integer $pageId
|
||||
@@ -108,7 +108,7 @@ class SiteHashService
|
||||
protected function getDomainByPageIdAndReplaceMarkers($pageId, $allowedSitesConfiguration)
|
||||
{
|
||||
$domainOfPage = $this->getSiteByPageId($pageId)->getDomain();
|
||||
$allowedSites = str_replace(['__solr_current_site', '__current_site'], $domainOfPage, $allowedSitesConfiguration);
|
||||
$allowedSites = str_replace(['__meilisearch_current_site', '__current_site'], $domainOfPage, $allowedSitesConfiguration);
|
||||
return (string)$allowedSites;
|
||||
}
|
||||
|
||||
|
@@ -25,7 +25,7 @@ namespace WapplerSystems\Meilisearch\Domain\Site;
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use WapplerSystems\Meilisearch\NoSolrConnectionFoundException;
|
||||
use WapplerSystems\Meilisearch\NoMeilisearchConnectionFoundException;
|
||||
|
||||
interface SiteInterface
|
||||
{
|
||||
@@ -52,11 +52,11 @@ interface SiteInterface
|
||||
public function getLabel();
|
||||
|
||||
/**
|
||||
* Gets the site's Solr TypoScript configuration (plugin.tx_meilisearch.*)
|
||||
* Gets the site's Meilisearch TypoScript configuration (plugin.tx_meilisearch.*)
|
||||
*
|
||||
* @return \WapplerSystems\Meilisearch\System\Configuration\TypoScriptConfiguration The Solr TypoScript configuration
|
||||
* @return \WapplerSystems\Meilisearch\System\Configuration\TypoScriptConfiguration The Meilisearch TypoScript configuration
|
||||
*/
|
||||
public function getSolrConfiguration();
|
||||
public function getMeilisearchConfiguration();
|
||||
|
||||
/**
|
||||
* Gets the site's default language as configured in
|
||||
@@ -114,15 +114,15 @@ interface SiteInterface
|
||||
/**
|
||||
* @param int $language
|
||||
* @return array
|
||||
* @throws NoSolrConnectionFoundException
|
||||
* @throws NoMeilisearchConnectionFoundException
|
||||
*/
|
||||
public function getSolrConnectionConfiguration(int $language = 0): array;
|
||||
public function getMeilisearchConnectionConfiguration(int $language = 0): array;
|
||||
|
||||
/**
|
||||
* @return array
|
||||
* @throws NoSolrConnectionFoundException
|
||||
* @throws NoMeilisearchConnectionFoundException
|
||||
*/
|
||||
public function getAllSolrConnectionConfigurations(): array;
|
||||
public function getAllMeilisearchConnectionConfigurations(): array;
|
||||
|
||||
public function isEnabled(): bool;
|
||||
}
|
||||
|
@@ -152,7 +152,7 @@ class SiteRepository
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all available TYPO3 sites with Solr configured.
|
||||
* Gets all available TYPO3 sites with Meilisearch configured.
|
||||
*
|
||||
* @param bool $stopOnInvalidSite
|
||||
* @throws \Exception
|
||||
@@ -180,18 +180,18 @@ class SiteRepository
|
||||
*/
|
||||
protected function getAvailableTYPO3ManagedSites(bool $stopOnInvalidSite): array
|
||||
{
|
||||
$typo3ManagedSolrSites = [];
|
||||
$typo3ManagedMeilisearchSites = [];
|
||||
$typo3Sites = $this->siteFinder->getAllSites();
|
||||
foreach ($typo3Sites as $typo3Site) {
|
||||
try {
|
||||
$rootPageId = $typo3Site->getRootPageId();
|
||||
if (isset($typo3ManagedSolrSites[$rootPageId])) {
|
||||
if (isset($typo3ManagedMeilisearchSites[$rootPageId])) {
|
||||
//get each site only once
|
||||
continue;
|
||||
}
|
||||
$typo3ManagedSolrSite = $this->buildSite($rootPageId);
|
||||
if ($typo3ManagedSolrSite->isEnabled()) {
|
||||
$typo3ManagedSolrSites[$rootPageId] = $typo3ManagedSolrSite;
|
||||
$typo3ManagedMeilisearchSite = $this->buildSite($rootPageId);
|
||||
if ($typo3ManagedMeilisearchSite->isEnabled()) {
|
||||
$typo3ManagedMeilisearchSites[$rootPageId] = $typo3ManagedMeilisearchSite;
|
||||
}
|
||||
|
||||
} catch (\Exception $e) {
|
||||
@@ -200,7 +200,7 @@ class SiteRepository
|
||||
}
|
||||
}
|
||||
}
|
||||
return $typo3ManagedSolrSites;
|
||||
return $typo3ManagedMeilisearchSites;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -262,7 +262,7 @@ class SiteRepository
|
||||
*/
|
||||
protected function buildTypo3ManagedSite(array $rootPageRecord): ?Typo3ManagedSite
|
||||
{
|
||||
$solrConfiguration = $this->frontendEnvironment->getSolrConfigurationFromPageId($rootPageRecord['uid']);
|
||||
$meilisearchConfiguration = $this->frontendEnvironment->getMeilisearchConfigurationFromPageId($rootPageRecord['uid']);
|
||||
/** @var \TYPO3\CMS\Core\Site\Entity\Site $typo3Site */
|
||||
try {
|
||||
$typo3Site = $this->siteFinder->getSiteByPageId($rootPageRecord['uid']);
|
||||
@@ -278,36 +278,26 @@ class SiteRepository
|
||||
return $language->getLanguageId();
|
||||
}, $typo3Site->getLanguages());
|
||||
|
||||
$solrConnectionConfigurations = [];
|
||||
$meilisearchConnectionConfigurations = [];
|
||||
|
||||
foreach ($availableLanguageIds as $languageUid) {
|
||||
$solrEnabled = SiteUtility::getConnectionProperty($typo3Site, 'enabled', $languageUid, 'read', true);
|
||||
if ($solrEnabled) {
|
||||
$solrConnectionConfigurations[$languageUid] = [
|
||||
$meilisearchEnabled = SiteUtility::getConnectionProperty($typo3Site, 'enabled', $languageUid, 'read', true);
|
||||
if ($meilisearchEnabled) {
|
||||
$meilisearchConnectionConfigurations[$languageUid] = [
|
||||
'connectionKey' => $rootPageRecord['uid'] . '|' . $languageUid,
|
||||
'rootPageTitle' => $rootPageRecord['title'],
|
||||
'rootPageUid' => $rootPageRecord['uid'],
|
||||
'read' => [
|
||||
'scheme' => SiteUtility::getConnectionProperty($typo3Site, 'scheme', $languageUid, 'read', 'http'),
|
||||
'host' => SiteUtility::getConnectionProperty($typo3Site, 'host', $languageUid, 'read', 'localhost'),
|
||||
'port' => (int)SiteUtility::getConnectionProperty($typo3Site, 'port', $languageUid, 'read', 8983),
|
||||
// @todo: transform core to path
|
||||
'path' =>
|
||||
SiteUtility::getConnectionProperty($typo3Site, 'path', $languageUid, 'read', '/solr/') .
|
||||
SiteUtility::getConnectionProperty($typo3Site, 'core', $languageUid, 'read', 'core_en') . '/' ,
|
||||
'username' => SiteUtility::getConnectionProperty($typo3Site, 'username', $languageUid, 'read', ''),
|
||||
'password' => SiteUtility::getConnectionProperty($typo3Site, 'password', $languageUid, 'read', '')
|
||||
'port' => (int)SiteUtility::getConnectionProperty($typo3Site, 'port', $languageUid, 'read', 7700),
|
||||
'apiKey' => SiteUtility::getConnectionProperty($typo3Site, 'apiKey', $languageUid, 'read', ''),
|
||||
],
|
||||
'write' => [
|
||||
'scheme' => SiteUtility::getConnectionProperty($typo3Site, 'scheme', $languageUid, 'write', 'http'),
|
||||
'host' => SiteUtility::getConnectionProperty($typo3Site, 'host', $languageUid, 'write', 'localhost'),
|
||||
'port' => (int)SiteUtility::getConnectionProperty($typo3Site, 'port', $languageUid, 'write', 8983),
|
||||
// @todo: transform core to path
|
||||
'path' =>
|
||||
SiteUtility::getConnectionProperty($typo3Site, 'path', $languageUid, 'read', '/solr/') .
|
||||
SiteUtility::getConnectionProperty($typo3Site, 'core', $languageUid, 'read', 'core_en') . '/' ,
|
||||
'username' => SiteUtility::getConnectionProperty($typo3Site, 'username', $languageUid, 'write', ''),
|
||||
'password' => SiteUtility::getConnectionProperty($typo3Site, 'password', $languageUid, 'write', '')
|
||||
'port' => (int)SiteUtility::getConnectionProperty($typo3Site, 'port', $languageUid, 'write', 7700),
|
||||
'apiKey' => SiteUtility::getConnectionProperty($typo3Site, 'apiKey', $languageUid, 'write', ''),
|
||||
],
|
||||
|
||||
'language' => $languageUid
|
||||
@@ -318,7 +308,7 @@ class SiteRepository
|
||||
return GeneralUtility::makeInstance(
|
||||
Typo3ManagedSite::class,
|
||||
/** @scrutinizer ignore-type */
|
||||
$solrConfiguration,
|
||||
$meilisearchConfiguration,
|
||||
/** @scrutinizer ignore-type */
|
||||
$rootPageRecord,
|
||||
/** @scrutinizer ignore-type */
|
||||
@@ -332,7 +322,7 @@ class SiteRepository
|
||||
/** @scrutinizer ignore-type */
|
||||
$availableLanguageIds,
|
||||
/** @scrutinizer ignore-type */
|
||||
$solrConnectionConfigurations,
|
||||
$meilisearchConnectionConfigurations,
|
||||
/** @scrutinizer ignore-type */
|
||||
$typo3Site
|
||||
);
|
||||
|
@@ -25,7 +25,7 @@ namespace WapplerSystems\Meilisearch\Domain\Site;
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use WapplerSystems\Meilisearch\NoSolrConnectionFoundException;
|
||||
use WapplerSystems\Meilisearch\NoMeilisearchConnectionFoundException;
|
||||
use WapplerSystems\Meilisearch\System\Configuration\TypoScriptConfiguration;
|
||||
use WapplerSystems\Meilisearch\System\Records\Pages\PagesRepository;
|
||||
use TYPO3\CMS\Core\Context\LanguageAspectFactory;
|
||||
@@ -47,12 +47,12 @@ class Typo3ManagedSite extends Site
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $solrConnectionConfigurations;
|
||||
protected $meilisearchConnectionConfigurations;
|
||||
|
||||
|
||||
public function __construct(
|
||||
TypoScriptConfiguration $configuration,
|
||||
array $page, $domain, $siteHash, PagesRepository $pagesRepository = null, $defaultLanguageId = 0, $availableLanguageIds = [], array $solrConnectionConfigurations = [], Typo3Site $typo3SiteObject = null)
|
||||
array $page, $domain, $siteHash, PagesRepository $pagesRepository = null, $defaultLanguageId = 0, $availableLanguageIds = [], array $meilisearchConnectionConfigurations = [], Typo3Site $typo3SiteObject = null)
|
||||
{
|
||||
$this->configuration = $configuration;
|
||||
$this->rootPage = $page;
|
||||
@@ -61,31 +61,31 @@ class Typo3ManagedSite extends Site
|
||||
$this->pagesRepository = $pagesRepository ?? GeneralUtility::makeInstance(PagesRepository::class);
|
||||
$this->defaultLanguageId = $defaultLanguageId;
|
||||
$this->availableLanguageIds = $availableLanguageIds;
|
||||
$this->solrConnectionConfigurations = $solrConnectionConfigurations;
|
||||
$this->meilisearchConnectionConfigurations = $meilisearchConnectionConfigurations;
|
||||
$this->typo3SiteObject = $typo3SiteObject;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $language
|
||||
* @return array
|
||||
* @throws NoSolrConnectionFoundException
|
||||
* @throws NoMeilisearchConnectionFoundException
|
||||
*/
|
||||
public function getSolrConnectionConfiguration(int $language = 0): array
|
||||
public function getMeilisearchConnectionConfiguration(int $language = 0): array
|
||||
{
|
||||
if (!is_array($this->solrConnectionConfigurations[$language])) {
|
||||
/* @var $noSolrConnectionException NoSolrConnectionFoundException */
|
||||
$noSolrConnectionException = GeneralUtility::makeInstance(
|
||||
NoSolrConnectionFoundException::class,
|
||||
/** @scrutinizer ignore-type */ 'Could not find a Solr connection for root page [' . $this->getRootPageId() . '] and language [' . $language . '].',
|
||||
if (!is_array($this->meilisearchConnectionConfigurations[$language])) {
|
||||
/* @var $noMeilisearchConnectionException NoMeilisearchConnectionFoundException */
|
||||
$noMeilisearchConnectionException = GeneralUtility::makeInstance(
|
||||
NoMeilisearchConnectionFoundException::class,
|
||||
/** @scrutinizer ignore-type */ 'Could not find a Meilisearch connection for root page [' . $this->getRootPageId() . '] and language [' . $language . '].',
|
||||
/** @scrutinizer ignore-type */ 1552491117
|
||||
);
|
||||
$noSolrConnectionException->setRootPageId($this->getRootPageId());
|
||||
$noSolrConnectionException->setLanguageId($language);
|
||||
$noMeilisearchConnectionException->setRootPageId($this->getRootPageId());
|
||||
$noMeilisearchConnectionException->setLanguageId($language);
|
||||
|
||||
throw $noSolrConnectionException;
|
||||
throw $noMeilisearchConnectionException;
|
||||
}
|
||||
|
||||
return $this->solrConnectionConfigurations[$language];
|
||||
return $this->meilisearchConnectionConfigurations[$language];
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user