diff --git a/config/pimcore/config.yaml b/config/pimcore/config.yaml
index d05be1955..e75733478 100644
--- a/config/pimcore/config.yaml
+++ b/config/pimcore/config.yaml
@@ -42,6 +42,15 @@ pimcore_studio_backend:
group: system
- key: preview
group: system
+ data_object:
+ predefined_columns:
+ - key: type
+ group: system
+ - key: fullpath
+ group: system
+ - key: classname
+ group: system
+
grid:
asset:
predefined_columns:
diff --git a/src/Asset/Controller/Search/GetConfigurationController.php b/src/Asset/Controller/Search/GetConfigurationController.php
index 522331984..e5ead212a 100644
--- a/src/Asset/Controller/Search/GetConfigurationController.php
+++ b/src/Asset/Controller/Search/GetConfigurationController.php
@@ -68,7 +68,7 @@ public function __construct(
HttpResponseCodes::BAD_REQUEST,
HttpResponseCodes::UNAUTHORIZED,
])]
- public function getAssetGridConfiguration(): JsonResponse
+ public function getAssetSearchConfiguration(): JsonResponse
{
$configuration = $this->configurationService->getAssetSearchConfiguration();
diff --git a/src/DataObject/Controller/Search/GetConfigurationController.php b/src/DataObject/Controller/Search/GetConfigurationController.php
new file mode 100644
index 000000000..547a68057
--- /dev/null
+++ b/src/DataObject/Controller/Search/GetConfigurationController.php
@@ -0,0 +1,86 @@
+value)]
+ #[Get(
+ path: self::PREFIX . '/data-object/search/configuration/{classId}',
+ operationId: 'data_object_get_search_configuration',
+ description: 'data_object_get_search_configuration_description',
+ summary: 'data_object_get_search_configuration_summary',
+ tags: [Tags::DataObjectsSearch->value]
+ )]
+ #[StringParameter(
+ name: 'classId',
+ example: 'EV',
+ description: 'Class Id of the data object',
+ required: false,
+ )]
+ #[SuccessResponse(
+ description: 'data_object_get_search_configuration_success_response',
+ content: new JsonContent(ref: DetailedConfiguration::class)
+ )]
+ #[DefaultResponses([
+ HttpResponseCodes::BAD_REQUEST,
+ HttpResponseCodes::NOT_FOUND,
+ HttpResponseCodes::UNAUTHORIZED,
+ ])]
+ public function getDataObjectSearchConfiguration(?string $classId): JsonResponse
+ {
+ $configuration = $this->gridConfigurationService->getDataObjectSearchConfiguration($classId);
+
+ return $this->jsonResponse($configuration);
+ }
+}
diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php
index d6f4ac855..c8db92763 100644
--- a/src/DependencyInjection/Configuration.php
+++ b/src/DependencyInjection/Configuration.php
@@ -251,6 +251,18 @@ private function addSearchGridConfiguration(ArrayNodeDefinition $node): void
->end()
->end()
->end()
+ ->arrayNode('data_object')
+ ->children()
+ ->arrayNode('predefined_columns')
+ ->arrayPrototype()
+ ->children()
+ ->scalarNode('group')->end()
+ ->scalarNode('key')->end()
+ ->end()
+ ->end()
+ ->end()
+ ->end()
+ ->end()
->end()
->end();
}
diff --git a/src/DependencyInjection/PimcoreStudioBackendExtension.php b/src/DependencyInjection/PimcoreStudioBackendExtension.php
index c02764eeb..3e111fbf1 100644
--- a/src/DependencyInjection/PimcoreStudioBackendExtension.php
+++ b/src/DependencyInjection/PimcoreStudioBackendExtension.php
@@ -110,11 +110,17 @@ public function load(array $configs, ContainerBuilder $container): void
$definition->setArgument('$assetPredefinedColumns', $config['grid']['asset']['predefined_columns']);
$definition = $container->getDefinition(ConfigurationServiceInterface::class);
+
$definition->setArgument(
'$assetSearchPredefinedColumns',
$config['search_grid']['asset']['predefined_columns']
);
+ $definition->setArgument(
+ '$dataObjectSearchPredefinedColumns',
+ $config['search_grid']['data_object']['predefined_columns']
+ );
+
$definition = $container->getDefinition(ConfigurationServiceInterface::class);
$definition->setArgument('$dataObjectPredefinedColumns', $config['grid']['data_object']['predefined_columns']);
diff --git a/src/Grid/Service/ColumnConfigurationService.php b/src/Grid/Service/ColumnConfigurationService.php
index 67c461d19..5303bf76b 100644
--- a/src/Grid/Service/ColumnConfigurationService.php
+++ b/src/Grid/Service/ColumnConfigurationService.php
@@ -16,6 +16,7 @@
namespace Pimcore\Bundle\StudioBackendBundle\Grid\Service;
+use Pimcore\Bundle\StudioBackendBundle\Exception\Api\InvalidArgumentException;
use Pimcore\Bundle\StudioBackendBundle\Grid\Column\ClassIdInterface;
use Pimcore\Bundle\StudioBackendBundle\Grid\Column\FolderIdInterface;
use Pimcore\Bundle\StudioBackendBundle\Grid\Event\GridColumnConfigurationEvent;
@@ -91,6 +92,22 @@ public function getAvailableDataObjectColumnConfiguration(string $classId, int $
}
+ /**
+ * @return ColumnConfiguration[]
+ *
+ * @throws InvalidArgumentException
+ */
+ public function getSystemDataObjectColumnConfiguration(): array
+ {
+ $systemCollector = $this->gridService->getColumnCollectors()['system.dataobject'];
+
+ if (!in_array(ElementTypes::TYPE_DATA_OBJECT, $systemCollector->supportedElementTypes(), true)) {
+ throw new InvalidArgumentException('collector does not support data objects');
+ }
+
+ return $systemCollector->getColumnConfigurations($this->gridService->getColumnDefinitions());
+ }
+
public function buildDataObjectAdapterColumnConfiguration(
ColumnFieldDefinition $definition,
?string $type = null,
diff --git a/src/Grid/Service/ColumnConfigurationServiceInterface.php b/src/Grid/Service/ColumnConfigurationServiceInterface.php
index 0da0311bd..0aaf3dd37 100644
--- a/src/Grid/Service/ColumnConfigurationServiceInterface.php
+++ b/src/Grid/Service/ColumnConfigurationServiceInterface.php
@@ -34,6 +34,11 @@ public function getAvailableAssetColumnConfiguration(): array;
*/
public function getAvailableDataObjectColumnConfiguration(string $classId, int $folderId): array;
+ /**
+ * @return ColumnConfiguration[]
+ */
+ public function getSystemDataObjectColumnConfiguration(): array;
+
/**
* Builds a column configuration for a data object adapter column.
* key type and is optional and can be used to build a column configuration for a specific key type.
diff --git a/src/Grid/Service/ConfigurationService.php b/src/Grid/Service/ConfigurationService.php
index 6c17cba14..f0ae4c775 100644
--- a/src/Grid/Service/ConfigurationService.php
+++ b/src/Grid/Service/ConfigurationService.php
@@ -52,6 +52,7 @@ public function __construct(
private array $assetPredefinedColumns,
private array $dataObjectPredefinedColumns,
private array $assetSearchPredefinedColumns,
+ private array $dataObjectSearchPredefinedColumns,
) {
}
@@ -117,6 +118,26 @@ public function getAssetSearchConfiguration(): DetailedConfiguration
return $this->buildDefaultConfiguration($availableColumns, $this->assetSearchPredefinedColumns);
}
+ /**
+ * {@inheritdoc}
+ */
+ public function getDataObjectSearchConfiguration(?string $classId): DetailedConfiguration
+ {
+ if (!$classId) {
+ return $this->buildDefaultConfiguration(
+ $this->columnConfigurationService->getSystemDataObjectColumnConfiguration(),
+ $this->dataObjectSearchPredefinedColumns,
+ true
+ );
+ }
+
+ return $this->buildDefaultConfiguration(
+ $this->columnConfigurationService->getAvailableDataObjectColumnConfiguration($classId, 1),
+ $this->dataObjectPredefinedColumns,
+ true
+ );
+ }
+
/**
* {@inheritdoc}
*/
@@ -296,7 +317,7 @@ private function getDefaultColumnsForSearchAndGrid(array $availableColumns, bool
/** @var Data $fieldDefinition */
$fieldDefinition = $column->getConfig()['fieldDefinition'];
- if ($search && !$fieldDefinition->getVisibleSearch()) {
+ if ($search && $fieldDefinition->getVisibleSearch()) {
$defaultColumns[] = new ColumnSchema(
key: $column->getKey(),
locale: $column->getLocale(),
diff --git a/src/Grid/Service/ConfigurationServiceInterface.php b/src/Grid/Service/ConfigurationServiceInterface.php
index cbf3706c6..1a857fe07 100644
--- a/src/Grid/Service/ConfigurationServiceInterface.php
+++ b/src/Grid/Service/ConfigurationServiceInterface.php
@@ -34,6 +34,11 @@ public function getAssetGridConfiguration(?int $configurationId, int $folderId):
public function getAssetSearchConfiguration(): DetailedConfiguration;
+ /**
+ * @throws NotFoundException
+ */
+ public function getDataObjectSearchConfiguration(?string $classId): DetailedConfiguration;
+
/**
* @throws NotFoundException
*/
diff --git a/src/Grid/Service/SystemColumnService.php b/src/Grid/Service/SystemColumnService.php
index f3d3421a0..e5500800c 100644
--- a/src/Grid/Service/SystemColumnService.php
+++ b/src/Grid/Service/SystemColumnService.php
@@ -51,6 +51,9 @@ public function getSystemColumnsForDataObjects(): array
$columns[$column] = $this->columnMapper->getType($column);
}
+ // Add missing columns
+ $columns['type'] = 'string';
+
return $columns;
}
diff --git a/src/OpenApi/Config/Tags.php b/src/OpenApi/Config/Tags.php
index 78fc169d1..d4609d739 100644
--- a/src/OpenApi/Config/Tags.php
+++ b/src/OpenApi/Config/Tags.php
@@ -57,6 +57,10 @@
name: Tags::DataObjectsGrid->value,
description: 'tag_dataobject_grid_description'
)]
+#[Tag(
+ name: Tags::DataObjectsSearch->value,
+ description: 'tag_dataobject_search_description'
+)]
#[Tag(
name: Tags::Dependencies->value,
description: 'tag_dependencies_description'
@@ -160,6 +164,7 @@ enum Tags: string
case CustomReports = 'Custom Reports';
case DataObjects = 'Data Objects';
case DataObjectsGrid = 'Data Object Grid';
+ case DataObjectsSearch = 'Data Object Search';
case Dependencies = 'Dependencies';
case Documents = 'Documents';
case Elements = 'Elements';
diff --git a/tests/Unit/Grid/Service/SystemColumnServiceTest.php b/tests/Unit/Grid/Service/SystemColumnServiceTest.php
index 8d351133e..101919908 100644
--- a/tests/Unit/Grid/Service/SystemColumnServiceTest.php
+++ b/tests/Unit/Grid/Service/SystemColumnServiceTest.php
@@ -58,6 +58,7 @@ public function testGetSystemColumnsForDataObjects(): void
'filename' => 'string',
'classname' => 'string',
'index' => 'integer',
+ 'type' => 'string',
], $systemColumnService->getSystemColumnsForDataObjects());
}
}
diff --git a/translations/studio_api_docs.en.yaml b/translations/studio_api_docs.en.yaml
index af581783d..2f15062bb 100644
--- a/translations/studio_api_docs.en.yaml
+++ b/translations/studio_api_docs.en.yaml
@@ -227,6 +227,9 @@ data_object_get_grid_configuration_description: |
Get data object saved grid configuration by {folderId} {classId} if a configuration-id is set, otherwise get the default configuration will be returned.
data_object_get_grid_configuration__success_response: Data Object grid configuration
data_object_get_grid_configuration_summary: Get data object grid configuration for a specific folder and class-id
+data_object_get_search_configuration_description: Get data object search configuration
+data_object_get_search_configuration_summary: Get data object search configuration
+data_object_get_search_configuration_success_response: Data object search configuration
data_object_update_by_id_description: |
You can create/update/delete list entries like properties or data object editable fields.
If you want to update (add/remove) only some data of a field (e.g data of multi-relation fields), use the PATCH method.
data_object_update_by_id_success_response: Successfully updated data object
@@ -554,6 +557,7 @@ tag_create_summary: Create a new tag
tag_dataobjects_description: DataObject operations to get/update/create/delete data
objects
tag_dataobject_grid_description: DataObject Grid operations
+tag_dataobject_search_description: DataObject Search operations
tag_delete_by_id_description: |
Delete a specific tag based on the given {id}
tag_delete_by_id_success_response: ID of successfully deleted tag