first commit

This commit is contained in:
Sven Wappler
2021-04-17 21:20:54 +02:00
parent c93ec9492a
commit cadcc8edb4
406 changed files with 4917 additions and 5157 deletions

View File

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

View File

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

View File

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

View File

@@ -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
);

View File

@@ -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];
}
/**