Skip to content

Commit d599578

Browse files
committed
fix: use factory for service
1 parent d2e6af0 commit d599578

File tree

3 files changed

+94
-11
lines changed

3 files changed

+94
-11
lines changed

src/DependencyInjection/AdvancedObjectSearchExtension.php

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,16 @@ public function loadInternal(array $config, ContainerBuilder $container)
6666

6767
$definition = $container->getDefinition(UpdateQueueProcessor::class);
6868
$definition->setArgument('$messengerQueueActivated', $config['messenger_queue_processing']['activated']);
69-
70-
$openSearchClientId = 'pimcore.open_search_client.' . $config['client_name'];
71-
$container->setAlias('pimcore.advanced_object_search.opensearch-client', $openSearchClientId)
72-
->setDeprecated(
73-
'pimcore/advanced-object-search',
74-
'6.1',
75-
'The "%alias_id%" service alias is deprecated and will be removed in version 7.0. ' .
76-
'Please use "pimcore.advanced_object_search.search-client" instead.'
77-
);
69+
if ($config['client_type'] === ClientType::OPEN_SEARCH->value) {
70+
$openSearchClientId = 'pimcore.open_search_client.' . $config['client_name'];
71+
$container->setAlias('pimcore.advanced_object_search.opensearch-client', $openSearchClientId)
72+
->setDeprecated(
73+
'pimcore/advanced-object-search',
74+
'6.1',
75+
'The "%alias_id%" service alias is deprecated and will be removed in version 7.0. ' .
76+
'Please use "pimcore.advanced_object_search.search-client" instead.'
77+
);
78+
}
7879

7980
$clientId = $this->getDefaultSearchClientId($config);
8081
$container->setAlias('pimcore.advanced_object_search.search-client', $clientId);
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
/**
5+
* Pimcore
6+
*
7+
* This source file is available under two different licenses:
8+
* - GNU General Public License version 3 (GPLv3)
9+
* - Pimcore Commercial License (PCL)
10+
* Full copyright and license information is available in
11+
* LICENSE.md which is distributed with this source code.
12+
*
13+
* @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.org)
14+
* @license http://www.pimcore.org/license GPLv3 and PCL
15+
*/
16+
17+
namespace AdvancedObjectSearchBundle\Factory\OpenSearch;
18+
19+
use AdvancedObjectSearchBundle\Service;
20+
use AdvancedObjectSearchBundle\Tools\IndexConfigService;
21+
use OpenSearch\ClientBuilder;
22+
use Pimcore\Bundle\ElasticsearchClientBundle\SearchClient\ElasticsearchClientInterface;
23+
use Pimcore\Bundle\OpenSearchClientBundle\SearchClient\OpenSearchClientInterface;
24+
use Pimcore\SearchClient\SearchClientInterface;
25+
use Pimcore\Security\User\TokenStorageUserResolver;
26+
use Pimcore\Translation\Translator;
27+
use Psr\Container\ContainerInterface;
28+
use Psr\Log\LoggerInterface;
29+
use RuntimeException;
30+
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
31+
32+
/**
33+
* @internal
34+
* @deprecated will be removed in version 7.0
35+
*/
36+
final readonly class LegacyServiceFactory
37+
{
38+
public function __construct(
39+
private LoggerInterface $logger,
40+
private TokenStorageUserResolver $userResolver,
41+
private EventDispatcherInterface $eventDispatcher,
42+
private Translator $translator,
43+
private IndexConfigService $indexConfigService,
44+
private SearchClientInterface $client
45+
)
46+
{
47+
48+
}
49+
50+
public function create(
51+
ContainerInterface $filterLocator
52+
): Service
53+
{
54+
$openSearchClient = match (true) {
55+
$this->client instanceof OpenSearchClientInterface => $this->client->getOriginalClient(),
56+
$this->client instanceof ElasticsearchClientInterface => ClientBuilder::create()->build(),
57+
default => null,
58+
};
59+
60+
if ($openSearchClient === null) {
61+
throw new RuntimeException('No client found for OpenSearch');
62+
}
63+
64+
$service = new Service(
65+
$this->logger,
66+
$this->userResolver,
67+
$filterLocator,
68+
$this->eventDispatcher,
69+
$this->translator,
70+
$this->indexConfigService,
71+
$openSearchClient
72+
);
73+
74+
$service->setSearchClientInterface($this->client);
75+
76+
return $service;
77+
}
78+
}

src/Resources/config/services.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,20 @@ services:
2626
tags:
2727
- { name: monolog.logger, channel: advanced_object_search.es }
2828

29+
bundle.advanced_object_search.service.legacy_factory:
30+
class: AdvancedObjectSearchBundle\Factory\OpenSearch\LegacyServiceFactory
31+
arguments:
32+
$client: '@pimcore.advanced_object_search.search-client'
33+
2934
bundle.advanced_object_search.service:
3035
alias: AdvancedObjectSearchBundle\Service
3136

3237
AdvancedObjectSearchBundle\Service:
38+
factory: ['@bundle.advanced_object_search.service.legacy_factory', 'create']
3339
arguments:
3440
$filterLocator: '@bundle.advanced_object_search.filter_locator'
35-
$openSearchClient: '@pimcore.advanced_object_search.opensearch-client'
3641
calls:
3742
- [setCoreFieldsConfig, ['%advanced_object_search.core_fields_configuration%']]
38-
- [setSearchClientInterface, ['@pimcore.advanced_object_search.search-client']]
3943
tags:
4044
- { name: monolog.logger, channel: pimcore_advanced_object_search }
4145

0 commit comments

Comments
 (0)