Skip to content

Commit 0030ccb

Browse files
authored
[Search] [Assets] Get Default grid Columns for search (#898)
* Get Grid configuration for asset Search. * Apply php-cs-fixer changes * Style. --------- Co-authored-by: martineiber <11687066+martineiber@users.noreply.github.com>
1 parent 85852b0 commit 0030ccb

9 files changed

Lines changed: 153 additions & 2 deletions

File tree

config/pimcore/config.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,15 @@ pimcore_studio_backend:
3333
format: "JPEG"
3434
quality: 90
3535
element_recycle_bin_threshold: 100
36+
search_grid:
37+
asset:
38+
predefined_columns:
39+
- key: type
40+
group: system
41+
- key: fullpath
42+
group: system
43+
- key: preview
44+
group: system
3645
grid:
3746
asset:
3847
predefined_columns:

doc/10_Extending_Studio/05_Grid.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ final readonly class MetadataCollector implements ColumnCollectorInterface
184184
}
185185
```
186186

187-
### Predefined Columns
187+
### Predefined Columns for Grids
188188
You can define what columns should be visible by default in the grid by modifying the `pimcore_studio_backend.grid.asset.predefined_columns` parameter in your `config.yaml` file.
189189

190190
Example:
@@ -206,6 +206,23 @@ pimcore_studio_backend:
206206
group: system
207207
```
208208
209+
### Predefined Columns for Search Grids
210+
211+
You can define what columns should be visible by default in the search grid by modifying the `pimcore_studio_backend.search_grid.asset.predefined_columns` parameter in your `config.yaml` file.
212+
213+
Example:
214+
```yaml
215+
216+
pimcore_studio_backend:
217+
search_grid:
218+
asset:
219+
predefined_columns:
220+
- key: id
221+
group: system
222+
- key: fullpath
223+
group: system
224+
```
225+
209226
### Advanced Columns
210227
Not all data types are supported by Advanced Columns. Transforms for Advanced Columns can only work with strings.
211228
If you want to use a custom data type in Advanced Columns, ensure your Resolver returns a string.
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
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\Asset\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\Response\DefaultResponses;
26+
use Pimcore\Bundle\StudioBackendBundle\OpenApi\Attribute\Response\SuccessResponse;
27+
use Pimcore\Bundle\StudioBackendBundle\OpenApi\Config\Tags;
28+
use Pimcore\Bundle\StudioBackendBundle\Util\Constant\HttpResponseCodes;
29+
use Pimcore\Bundle\StudioBackendBundle\Util\Constant\UserPermissions;
30+
use Symfony\Component\HttpFoundation\JsonResponse;
31+
use Symfony\Component\Routing\Attribute\Route;
32+
use Symfony\Component\Security\Http\Attribute\IsGranted;
33+
use Symfony\Component\Serializer\SerializerInterface;
34+
35+
/**
36+
* @internal
37+
*/
38+
final class GetConfigurationController extends AbstractApiController
39+
{
40+
public function __construct(
41+
SerializerInterface $serializer,
42+
private readonly ConfigurationServiceInterface $configurationService,
43+
) {
44+
parent::__construct($serializer);
45+
}
46+
47+
/**
48+
* @throws NotFoundException
49+
*/
50+
#[Route(
51+
'/assets/search/configuration/',
52+
name: 'pimcore_studio_api_get_asset_search_configuration',
53+
methods: ['GET'],
54+
)]
55+
#[IsGranted(UserPermissions::ASSETS->value)]
56+
#[Get(
57+
path: self::PREFIX . '/assets/search/configuration/',
58+
operationId: 'asset_get_search_configuration',
59+
description: 'asset_get_search_configuration_description',
60+
summary: 'asset_get_search_configuration_summary',
61+
tags: [Tags::AssetSearch->value]
62+
)]
63+
#[SuccessResponse(
64+
description: 'asset_get_search_configuration_success_response',
65+
content: new JsonContent(ref: DetailedConfiguration::class)
66+
)]
67+
#[DefaultResponses([
68+
HttpResponseCodes::BAD_REQUEST,
69+
HttpResponseCodes::UNAUTHORIZED,
70+
])]
71+
public function getAssetGridConfiguration(): JsonResponse
72+
{
73+
$configuration = $this->configurationService->getAssetSearchConfiguration();
74+
75+
return $this->jsonResponse($configuration);
76+
}
77+
}

src/DependencyInjection/Configuration.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ public function getConfigTreeBuilder(): TreeBuilder
7070
$this->addAssetDownloadLimits($rootNode);
7171
$this->addCsvSettings($rootNode);
7272
$this->addGridConfiguration($rootNode);
73+
$this->addSearchGridConfiguration($rootNode);
7374
$this->addNoteTypes($rootNode);
7475
$this->addDataObjectAdapterMapping($rootNode);
7576
$this->addUserNode($rootNode);
@@ -233,6 +234,27 @@ private function addGridConfiguration(ArrayNodeDefinition $node): void
233234
->end();
234235
}
235236

237+
private function addSearchGridConfiguration(ArrayNodeDefinition $node): void
238+
{
239+
$node->children()
240+
->arrayNode('search_grid')
241+
->children()
242+
->arrayNode('asset')
243+
->children()
244+
->arrayNode('predefined_columns')
245+
->arrayPrototype()
246+
->children()
247+
->scalarNode('group')->end()
248+
->scalarNode('key')->end()
249+
->end()
250+
->end()
251+
->end()
252+
->end()
253+
->end()
254+
->end()
255+
->end();
256+
}
257+
236258
private function addMercureConfiguration(ArrayNodeDefinition $node): void
237259
{
238260
$node->children()

src/DependencyInjection/PimcoreStudioBackendExtension.php

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

112+
$definition = $container->getDefinition(ConfigurationServiceInterface::class);
113+
$definition->setArgument(
114+
'$assetSearchPredefinedColumns',
115+
$config['search_grid']['asset']['predefined_columns']
116+
);
117+
112118
$definition = $container->getDefinition(ConfigurationServiceInterface::class);
113119
$definition->setArgument('$dataObjectPredefinedColumns', $config['grid']['data_object']['predefined_columns']);
114120

src/Grid/Service/ConfigurationService.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ public function __construct(
5050
private DetailedConfigurationHydratorInterface $detailedConfigurationHydrator,
5151
private FavoriteServiceInterface $favoriteService,
5252
private array $assetPredefinedColumns,
53-
private array $dataObjectPredefinedColumns
53+
private array $dataObjectPredefinedColumns,
54+
private array $assetSearchPredefinedColumns,
5455
) {
5556
}
5657

@@ -109,6 +110,13 @@ public function getAssetGridConfiguration(?int $configurationId, int $folderId):
109110
return $configuration;
110111
}
111112

113+
public function getAssetSearchConfiguration(): DetailedConfiguration
114+
{
115+
$availableColumns = $this->columnConfigurationService->getAvailableAssetColumnConfiguration();
116+
117+
return $this->buildDefaultConfiguration($availableColumns, $this->assetSearchPredefinedColumns);
118+
}
119+
112120
/**
113121
* {@inheritdoc}
114122
*/

src/Grid/Service/ConfigurationServiceInterface.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ interface ConfigurationServiceInterface
3232
*/
3333
public function getAssetGridConfiguration(?int $configurationId, int $folderId): DetailedConfiguration;
3434

35+
public function getAssetSearchConfiguration(): DetailedConfiguration;
36+
3537
/**
3638
* @throws NotFoundException
3739
*/

src/OpenApi/Config/Tags.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
name: Tags::AssetGrid->value,
3030
description: 'tag_asset_grid_description'
3131
)]
32+
#[Tag(
33+
name: Tags::AssetSearch->value,
34+
description: 'tag_asset_search_description'
35+
)]
3236
#[Tag(
3337
name: Tags::AssetThumbnails->value,
3438
description: 'tag_asset_thumbnail_description'
@@ -149,6 +153,7 @@ enum Tags: string
149153
{
150154
case Assets = 'Assets';
151155
case AssetGrid = 'Asset Grid';
156+
case AssetSearch = 'Asset Search';
152157
case AssetThumbnails = 'Asset Thumbnails';
153158
case Authorization = 'Authorization';
154159
case ClassDefinition = 'Class Definition';

translations/studio_api_docs.en.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,10 @@ asset_video_stream_by_thumbnail_description: |
178178
List of <b>thumbnail names</b> can be obtained via the thumbnail video collection endpoint
179179
asset_video_stream_by_thumbnail_success_response: Video stream based on thumbnail name
180180
asset_video_stream_by_thumbnail_summary: Stream video asset by ID and thumbnail name
181+
asset_get_search_configuration: Get asset search configuration
182+
asset_get_search_configuration_description: Get asset configuration
183+
asset_get_search_configuration_summary: Get asset search configuration
184+
asset_get_search_configuration_success_response: Asset search configuration
181185
data_object_add_description: |
182186
Add a new data object to the given <strong>{parentId}</strong>. <br> The <strong>{parentId}</strong> must be an ID of a folder or another data object. See the full description of request fields with the schema <strong>DataObjectAdd</strong>
183187
data_object_add_success_response: ID of added data object
@@ -526,6 +530,7 @@ simple_search_preview_get_success_response: Simple search results preview for el
526530
tag_asset_thumbnail_description: List thumbnails for assets like videos and images
527531
tag_assets_description: Asset operations to get/update/create/delete assets
528532
tag_asset_grid_description: Asset Grid operations
533+
tag_asset_search_description: Asset Search operations
529534
tag_assign_to_element_description: |
530535
Assign a specific tag based on the given <strong>{tagId}</strong> to an element based on <strong>{elementType}</strong> and <strong>{id}</strong>. <br>
531536
The <strong>{id}</strong> must be an ID of an existing element of the provided <strong>{elementType}</strong>.

0 commit comments

Comments
 (0)