Skip to content

Commit

Permalink
fix: make bundle config registration more resilient
Browse files Browse the repository at this point in the history
  • Loading branch information
aarongerig committed May 16, 2024
1 parent 60effca commit f6c0bbf
Showing 1 changed file with 18 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,9 @@ public function load(array $configs, ContainerBuilder $container): void
);

$bundles = $container->getParameter('kernel.bundles');
$isMergeSupported = \array_key_exists('ObjectMergerBundle', $bundles);

if (\array_key_exists('ObjectMergerBundle', $bundles)) {
$container->setParameter('pimcore_element_manager.merge_supported', true);
}
else {
$container->setParameter('pimcore_element_manager.merge_supported', false);
}
$container->setParameter('pimcore_element_manager.merge_supported', $isMergeSupported);

$this->registerDuplicationCheckerConfiguration($config['duplication'] ?? [], $container, $loader);

Expand Down Expand Up @@ -105,12 +101,12 @@ private function registerSaveManagerConfiguration(

$definition = new Definition($config['save_manager_class']);
$options = [
'naming_scheme' => $config['naming_scheme']['options'],
'duplicates' => $config['duplicates']['options'],
'validations' => $config['validations']['options'],
'naming_scheme' => $config['naming_scheme']['options'] ?? null,
'duplicates' => $config['duplicates']['options'] ?? null,
'validations' => $config['validations']['options'] ?? null,
];

if ($config['naming_scheme']['enabled']) {
if (isset($config['naming_scheme']['enabled']) && $config['naming_scheme']['enabled'] === true) {
$namingDefinition = new Definition(NamingSchemeSaveHandler::class, [
new Reference($config['naming_scheme']['service']),
]);
Expand All @@ -126,22 +122,20 @@ private function registerSaveManagerConfiguration(
]);
}

if ($config['unique_key']['enabled']) {
if (isset($config['unique_key']['enabled']) && $config['unique_key']['enabled'] === true) {
$definition->addMethodCall('addSaveHandler', [new Reference(UniqueKeySaveHandler::class)]);
}

if ($config['validations']['enabled_on_save']) {
if (isset($config['validations']['enabled_on_save']) && $config['validations']['enabled_on_save'] === true) {
$definition->addMethodCall('addSaveHandler', [new Reference(ValidationSaveHandler::class)]);
}

if ($config['duplicates']['enabled_on_save']) {
if (isset($config['duplicates']['enabled_on_save']) && $config['duplicates']['enabled_on_save'] === true) {
$definition->addMethodCall('addSaveHandler', [new Reference(DuplicationSaveHandler::class)]);
}

if ($config['save_handlers']) {
foreach ($config['save_handlers'] as $saveHandler) {
$definition->addMethodCall('addSaveHandler', [new Reference($saveHandler)]);
}
foreach ($config['save_handlers'] ?? [] as $saveHandler) {
$definition->addMethodCall('addSaveHandler', [new Reference($saveHandler)]);
}

$definition->addMethodCall('setOptions', [$options]);
Expand Down Expand Up @@ -221,9 +215,7 @@ private function registerDuplicationCheckerMapping(ContainerBuilder $container,
$this->registerMappingFilesFromDir($dir, $fileRecorder);
}

if (isset($config['mapping']['paths']) && \is_array($config['mapping']['paths'])) {
$this->registerMappingFilesFromConfig($container, $config, $fileRecorder);
}
$this->registerMappingFilesFromConfig($container, $config, $fileRecorder);
}

private function registerMappingFilesFromDir($dir, callable $fileRecorder): void
Expand All @@ -246,7 +238,7 @@ private function registerMappingFilesFromConfig(
array $config,
callable $fileRecorder
): void {
foreach ($config['mapping']['paths'] as $path) {
foreach ($config['mapping']['paths'] ?? [] as $path) {
if (\is_dir($path)) {
$this->registerMappingFilesFromDir($path, $fileRecorder);
$container->addResource(new DirectoryResource($path, '/^$/'));
Expand All @@ -256,6 +248,7 @@ private function registerMappingFilesFromConfig(
\sprintf('Unsupported mapping type in "%s", supported types is only Yaml.', $path)
);
}

$fileRecorder($matches[1], $path);
} else {
throw new \RuntimeException(\sprintf('Could not open file or directory "%s".', $path));
Expand All @@ -268,16 +261,16 @@ private function registerDuplicateIndexConfiguration(
string $className,
array $config
): void {
if (!$config || !$config['enabled']) {
if (!isset($config['enabled']) || $config['enabled'] !== true) {
return;
}

$groups = [];

foreach ($config['groups'] as $groupName => $group) {
foreach ($config['groups'] ?? [] as $groupName => $group) {
$fields = [];

foreach ($group['fields'] as $fieldName => $fieldConfig) {
foreach ($group['fields'] ?? [] as $fieldName => $fieldConfig) {
$fieldMetaData = new Definition(FieldMetadata::class, [
$fieldName, $fieldConfig,
]);
Expand Down Expand Up @@ -312,7 +305,7 @@ private function registerDuplicateIndexConfiguration(
return;
}

$listFields = $config['list_fields'];
$listFields = $config['list_fields'] ?? [];

$metadata = new Definition(Metadata::class, [$className, $groups, $listFields]);

Expand Down

0 comments on commit f6c0bbf

Please sign in to comment.