Skip to content

Commit a2f3e88

Browse files
authored
[Search] [Data Objects] Get Default grid Columns for search (#911)
* Implement configuration for data object search. * Apply php-cs-fixer changes * [Search] Rename grid configuration methods to reflect search functionality * [Test] Add 'type' field to system columns for data objects * Fis Path --------- Co-authored-by: martineiber <11687066+martineiber@users.noreply.github.com>
1 parent 16f8a1f commit a2f3e88

13 files changed

Lines changed: 176 additions & 2 deletions

File tree

config/pimcore/config.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,15 @@ pimcore_studio_backend:
4242
group: system
4343
- key: preview
4444
group: system
45+
data_object:
46+
predefined_columns:
47+
- key: type
48+
group: system
49+
- key: fullpath
50+
group: system
51+
- key: classname
52+
group: system
53+
4554
grid:
4655
asset:
4756
predefined_columns:

src/Asset/Controller/Search/GetConfigurationController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public function __construct(
6868
HttpResponseCodes::BAD_REQUEST,
6969
HttpResponseCodes::UNAUTHORIZED,
7070
])]
71-
public function getAssetGridConfiguration(): JsonResponse
71+
public function getAssetSearchConfiguration(): JsonResponse
7272
{
7373
$configuration = $this->configurationService->getAssetSearchConfiguration();
7474

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
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 Pimcore\Bundle\StudioBackendBundle\DataObject\Controller\Search;
18+
19+
use OpenApi\Attributes\Get;
20+
use OpenApi\Attributes\JsonContent;
21+
use Pimcore\Bundle\StudioBackendBundle\Controller\AbstractApiController;
22+
use Pimcore\Bundle\StudioBackendBundle\Exception\Api\NotFoundException;
23+
use Pimcore\Bundle\StudioBackendBundle\Grid\Schema\DetailedConfiguration;
24+
use Pimcore\Bundle\StudioBackendBundle\Grid\Service\ConfigurationServiceInterface;
25+
use Pimcore\Bundle\StudioBackendBundle\OpenApi\Attribute\Parameter\Path\StringParameter;
26+
use Pimcore\Bundle\StudioBackendBundle\OpenApi\Attribute\Response\DefaultResponses;
27+
use Pimcore\Bundle\StudioBackendBundle\OpenApi\Attribute\Response\SuccessResponse;
28+
use Pimcore\Bundle\StudioBackendBundle\OpenApi\Config\Tags;
29+
use Pimcore\Bundle\StudioBackendBundle\Util\Constant\HttpResponseCodes;
30+
use Pimcore\Bundle\StudioBackendBundle\Util\Constant\UserPermissions;
31+
use Symfony\Component\HttpFoundation\JsonResponse;
32+
use Symfony\Component\Routing\Attribute\Route;
33+
use Symfony\Component\Security\Http\Attribute\IsGranted;
34+
use Symfony\Component\Serializer\SerializerInterface;
35+
36+
/**
37+
* @internal
38+
*/
39+
final class GetConfigurationController extends AbstractApiController
40+
{
41+
public function __construct(
42+
SerializerInterface $serializer,
43+
private readonly ConfigurationServiceInterface $gridConfigurationService,
44+
) {
45+
parent::__construct($serializer);
46+
}
47+
48+
/**
49+
* @throws NotFoundException
50+
*/
51+
#[Route(
52+
'/data-object/search/configuration/{classId?}',
53+
name: 'pimcore_studio_api_get_data_object_search_configuration',
54+
methods: ['GET'],
55+
56+
)]
57+
#[IsGranted(UserPermissions::DATA_OBJECTS->value)]
58+
#[Get(
59+
path: self::PREFIX . '/data-object/search/configuration/{classId}',
60+
operationId: 'data_object_get_search_configuration',
61+
description: 'data_object_get_search_configuration_description',
62+
summary: 'data_object_get_search_configuration_summary',
63+
tags: [Tags::DataObjectsSearch->value]
64+
)]
65+
#[StringParameter(
66+
name: 'classId',
67+
example: 'EV',
68+
description: 'Class Id of the data object',
69+
required: false,
70+
)]
71+
#[SuccessResponse(
72+
description: 'data_object_get_search_configuration_success_response',
73+
content: new JsonContent(ref: DetailedConfiguration::class)
74+
)]
75+
#[DefaultResponses([
76+
HttpResponseCodes::BAD_REQUEST,
77+
HttpResponseCodes::NOT_FOUND,
78+
HttpResponseCodes::UNAUTHORIZED,
79+
])]
80+
public function getDataObjectSearchConfiguration(?string $classId): JsonResponse
81+
{
82+
$configuration = $this->gridConfigurationService->getDataObjectSearchConfiguration($classId);
83+
84+
return $this->jsonResponse($configuration);
85+
}
86+
}

src/DependencyInjection/Configuration.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,18 @@ private function addSearchGridConfiguration(ArrayNodeDefinition $node): void
251251
->end()
252252
->end()
253253
->end()
254+
->arrayNode('data_object')
255+
->children()
256+
->arrayNode('predefined_columns')
257+
->arrayPrototype()
258+
->children()
259+
->scalarNode('group')->end()
260+
->scalarNode('key')->end()
261+
->end()
262+
->end()
263+
->end()
264+
->end()
265+
->end()
254266
->end()
255267
->end();
256268
}

src/DependencyInjection/PimcoreStudioBackendExtension.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,17 @@ public function load(array $configs, ContainerBuilder $container): void
110110
$definition->setArgument('$assetPredefinedColumns', $config['grid']['asset']['predefined_columns']);
111111

112112
$definition = $container->getDefinition(ConfigurationServiceInterface::class);
113+
113114
$definition->setArgument(
114115
'$assetSearchPredefinedColumns',
115116
$config['search_grid']['asset']['predefined_columns']
116117
);
117118

119+
$definition->setArgument(
120+
'$dataObjectSearchPredefinedColumns',
121+
$config['search_grid']['data_object']['predefined_columns']
122+
);
123+
118124
$definition = $container->getDefinition(ConfigurationServiceInterface::class);
119125
$definition->setArgument('$dataObjectPredefinedColumns', $config['grid']['data_object']['predefined_columns']);
120126

src/Grid/Service/ColumnConfigurationService.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
namespace Pimcore\Bundle\StudioBackendBundle\Grid\Service;
1818

19+
use Pimcore\Bundle\StudioBackendBundle\Exception\Api\InvalidArgumentException;
1920
use Pimcore\Bundle\StudioBackendBundle\Grid\Column\ClassIdInterface;
2021
use Pimcore\Bundle\StudioBackendBundle\Grid\Column\FolderIdInterface;
2122
use Pimcore\Bundle\StudioBackendBundle\Grid\Event\GridColumnConfigurationEvent;
@@ -91,6 +92,22 @@ public function getAvailableDataObjectColumnConfiguration(string $classId, int $
9192

9293
}
9394

95+
/**
96+
* @return ColumnConfiguration[]
97+
*
98+
* @throws InvalidArgumentException
99+
*/
100+
public function getSystemDataObjectColumnConfiguration(): array
101+
{
102+
$systemCollector = $this->gridService->getColumnCollectors()['system.dataobject'];
103+
104+
if (!in_array(ElementTypes::TYPE_DATA_OBJECT, $systemCollector->supportedElementTypes(), true)) {
105+
throw new InvalidArgumentException('collector does not support data objects');
106+
}
107+
108+
return $systemCollector->getColumnConfigurations($this->gridService->getColumnDefinitions());
109+
}
110+
94111
public function buildDataObjectAdapterColumnConfiguration(
95112
ColumnFieldDefinition $definition,
96113
?string $type = null,

src/Grid/Service/ColumnConfigurationServiceInterface.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ public function getAvailableAssetColumnConfiguration(): array;
3434
*/
3535
public function getAvailableDataObjectColumnConfiguration(string $classId, int $folderId): array;
3636

37+
/**
38+
* @return ColumnConfiguration[]
39+
*/
40+
public function getSystemDataObjectColumnConfiguration(): array;
41+
3742
/**
3843
* Builds a column configuration for a data object adapter column.
3944
* key type and is optional and can be used to build a column configuration for a specific key type.

src/Grid/Service/ConfigurationService.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public function __construct(
5252
private array $assetPredefinedColumns,
5353
private array $dataObjectPredefinedColumns,
5454
private array $assetSearchPredefinedColumns,
55+
private array $dataObjectSearchPredefinedColumns,
5556
) {
5657
}
5758

@@ -117,6 +118,26 @@ public function getAssetSearchConfiguration(): DetailedConfiguration
117118
return $this->buildDefaultConfiguration($availableColumns, $this->assetSearchPredefinedColumns);
118119
}
119120

121+
/**
122+
* {@inheritdoc}
123+
*/
124+
public function getDataObjectSearchConfiguration(?string $classId): DetailedConfiguration
125+
{
126+
if (!$classId) {
127+
return $this->buildDefaultConfiguration(
128+
$this->columnConfigurationService->getSystemDataObjectColumnConfiguration(),
129+
$this->dataObjectSearchPredefinedColumns,
130+
true
131+
);
132+
}
133+
134+
return $this->buildDefaultConfiguration(
135+
$this->columnConfigurationService->getAvailableDataObjectColumnConfiguration($classId, 1),
136+
$this->dataObjectPredefinedColumns,
137+
true
138+
);
139+
}
140+
120141
/**
121142
* {@inheritdoc}
122143
*/
@@ -296,7 +317,7 @@ private function getDefaultColumnsForSearchAndGrid(array $availableColumns, bool
296317

297318
/** @var Data $fieldDefinition */
298319
$fieldDefinition = $column->getConfig()['fieldDefinition'];
299-
if ($search && !$fieldDefinition->getVisibleSearch()) {
320+
if ($search && $fieldDefinition->getVisibleSearch()) {
300321
$defaultColumns[] = new ColumnSchema(
301322
key: $column->getKey(),
302323
locale: $column->getLocale(),

src/Grid/Service/ConfigurationServiceInterface.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ public function getAssetGridConfiguration(?int $configurationId, int $folderId):
3434

3535
public function getAssetSearchConfiguration(): DetailedConfiguration;
3636

37+
/**
38+
* @throws NotFoundException
39+
*/
40+
public function getDataObjectSearchConfiguration(?string $classId): DetailedConfiguration;
41+
3742
/**
3843
* @throws NotFoundException
3944
*/

src/Grid/Service/SystemColumnService.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ public function getSystemColumnsForDataObjects(): array
5151
$columns[$column] = $this->columnMapper->getType($column);
5252
}
5353

54+
// Add missing columns
55+
$columns['type'] = 'string';
56+
5457
return $columns;
5558
}
5659

0 commit comments

Comments
 (0)