Skip to content

Commit d0c4256

Browse files
authored
[Grid] Add column definition for each data type. (#928)
* Add column definition for each data type. * Apply php-cs-fixer changes * Add logging * Apply php-cs-fixer changes --------- Co-authored-by: martineiber <[email protected]>
1 parent 12c6e47 commit d0c4256

File tree

77 files changed

+2496
-21
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+2496
-21
lines changed

config/grid.yaml

+153-2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ services:
5151
Pimcore\Bundle\StudioBackendBundle\Grid\Service\UpdateConfigurationServiceInterface:
5252
class: Pimcore\Bundle\StudioBackendBundle\Grid\Service\UpdateConfigurationService
5353

54+
Pimcore\Bundle\StudioBackendBundle\Grid\Service\GridSearchServiceInterface:
55+
class: Pimcore\Bundle\StudioBackendBundle\Grid\Service\GridSearchService
56+
5457
#
5558
# Repository
5659
#
@@ -123,8 +126,156 @@ services:
123126
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\Metadata\DataObjectDefinition:
124127
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
125128

126-
Pimcore\Bundle\StudioBackendBundle\Grid\Service\GridSearchServiceInterface:
127-
class: Pimcore\Bundle\StudioBackendBundle\Grid\Service\GridSearchService
129+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\InputDefinition:
130+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
131+
132+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\TextareaDefinition:
133+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
134+
135+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\WysiwygDefinition:
136+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
137+
138+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\PasswordDefinition:
139+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
140+
141+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\InputQuantityValueDefinition:
142+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
143+
144+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\NumericDefinition:
145+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
146+
147+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\NumericRangeDefinition:
148+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
149+
150+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\SliderDefinition:
151+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
152+
153+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\QuantityValueDefinition:
154+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
155+
156+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\QuantityValueRangeDefinition:
157+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
158+
159+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\BooleanSelectDefinition:
160+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
161+
162+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\SelectDefinition:
163+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
164+
165+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\UserDefinition:
166+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
167+
168+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\CountryDefinition:
169+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
170+
171+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\LanguageDefinition:
172+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
173+
174+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\MultiselectDefinition:
175+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
176+
177+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\CountryMultiselectDefinition:
178+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
179+
180+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\LanguageMultiselectDefinition:
181+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
182+
183+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\DateDefinition:
184+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
185+
186+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\DateTimeDefinition:
187+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
188+
189+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\DateRangeDefinition:
190+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
191+
192+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\TimeDefinition:
193+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
194+
195+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\ImageDefinition:
196+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
197+
198+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\HotSpotImageDefinition:
199+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
200+
201+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\ImageGalleryDefinition:
202+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
203+
204+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\ExternalImageDefinition:
205+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
206+
207+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\VideoDefinition:
208+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
209+
210+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\ManyToOneRelationDefinition:
211+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
212+
213+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\ManyToManyRelationDefinition:
214+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
215+
216+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\ManyToManyObjectRelationDefinition:
217+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
218+
219+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\AdvancedManyToManyRelationDefinition:
220+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
221+
222+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\AdvancedManyToManyObjectRelationDefinition:
223+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
224+
225+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\ReverseObjectRelationDefinition:
226+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
227+
228+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\GeopointDefinition:
229+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
230+
231+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\GeoboundsDefinition:
232+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
233+
234+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\GeopolygonDefinition:
235+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
236+
237+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\GeopolylineDefinition:
238+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
239+
240+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\ConsentDefinition:
241+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
242+
243+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\FirstnameDefinition:
244+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
245+
246+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\LastnameDefinition:
247+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
248+
249+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\EmailDefinition:
250+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
251+
252+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\GenderDefinition:
253+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
254+
255+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\TableDefinition:
256+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
257+
258+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\StructuredTableDefinition:
259+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
260+
261+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\RgbaColorDefinition:
262+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
263+
264+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\EncryptedFieldDefinition:
265+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
266+
267+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\UrlSlugDefinition:
268+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
269+
270+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\CheckboxDefinition:
271+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
272+
273+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\LinkDefinition:
274+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
275+
276+
Pimcore\Bundle\StudioBackendBundle\Grid\Column\Definition\DataObject\CalculatedValueDefinition:
277+
tags: [ 'pimcore.studio_backend.grid_column_definition' ]
278+
128279

129280
#
130281
# Column Resolver

src/Grid/Column/Collector/Asset/MetadataCollector.php

+2
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ private function getDefaultMetadata(): array
6868
sortable: true,
6969
editable: true,
7070
exportable: true,
71+
filterable: true,
7172
localizable: true,
7273
locale: null,
7374
type: 'metadata.input',
@@ -101,6 +102,7 @@ private function getPredefinedMetadata(array $availableColumnDefinitions): array
101102
sortable: $availableColumnDefinitions[$type]->isSortable(),
102103
editable: true,
103104
exportable: $availableColumnDefinitions[$type]->isExportable(),
105+
filterable: $availableColumnDefinitions[$type]->isFilterable(),
104106
localizable: true,
105107
locale: null,
106108
type: $type,

src/Grid/Column/Collector/Asset/SystemFieldCollector.php

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public function getColumnConfigurations(array $availableColumnDefinitions): arra
6060
sortable: $availableColumnDefinitions[$type]->isSortable(),
6161
editable: false,
6262
exportable: $availableColumnDefinitions[$type]->isExportable(),
63+
filterable: $availableColumnDefinitions[$type]->isFilterable(),
6364
localizable: false,
6465
locale: null,
6566
type: $availableColumnDefinitions[$type]->getType(),

src/Grid/Column/Collector/DataObject/AdvancedColumnCollector.php

+5
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ private function buildColumnConfigurations(array $simpleFields, array $relationF
132132
sortable: false,
133133
editable: false,
134134
exportable: true,
135+
filterable: false,
135136
localizable: true,
136137
locale: null,
137138
type: 'dataobject.advanced',
@@ -233,6 +234,10 @@ private function buildFieldForClassName(string $className): array
233234
throw new NotFoundException('Class definition', $className);
234235
}
235236

237+
if ($definitionOfTheRelation === null) {
238+
throw new NotFoundException('Class definition', $className);
239+
}
240+
236241
$test = $this->classDefinitionService->getFilteredLayoutDefinitions(
237242
$definitionOfTheRelation->getId(),
238243
$this->getFolderId()

src/Grid/Column/Collector/DataObject/FieldDefinitionCollector.php

+15-5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
namespace Pimcore\Bundle\StudioBackendBundle\Grid\Column\Collector\DataObject;
1818

19+
use Pimcore\Bundle\StudioBackendBundle\Exception\Api\InvalidArgumentException;
1920
use Pimcore\Bundle\StudioBackendBundle\Grid\Column\ClassIdInterface;
2021
use Pimcore\Bundle\StudioBackendBundle\Grid\Column\ColumnCollectorInterface;
2122
use Pimcore\Bundle\StudioBackendBundle\Grid\Column\FolderIdInterface;
@@ -30,6 +31,7 @@
3031
use Pimcore\Model\DataObject\ClassDefinition\Data\Localizedfields;
3132
use Pimcore\Model\DataObject\ClassDefinition\Data\Objectbricks;
3233
use Pimcore\Model\DataObject\ClassDefinition\Layout;
34+
use Psr\Log\LoggerInterface;
3335

3436
/**
3537
* @internal
@@ -46,7 +48,8 @@ final class FieldDefinitionCollector implements ColumnCollectorInterface, ClassI
4648

4749
public function __construct(
4850
private readonly ClassDefinitionServiceInterface $classDefinitionService,
49-
private readonly ColumnConfigurationServiceInterface $columnConfigurationService
51+
private readonly ColumnConfigurationServiceInterface $columnConfigurationService,
52+
private readonly LoggerInterface $logger
5053
) {
5154
}
5255

@@ -122,10 +125,17 @@ private function buildColumnConfigurations(): array
122125
{
123126
$columns = [];
124127
foreach ($this->groupedDefinitions as $definition) {
125-
$columns[] = $this->columnConfigurationService->buildDataObjectAdapterColumnConfiguration(
126-
$definition,
127-
'dataobject.adapter'
128-
);
128+
try {
129+
$columns[] = $this->columnConfigurationService->buildDataObjectAdapterColumnConfiguration(
130+
$definition,
131+
'dataobject.adapter'
132+
);
133+
} catch (InvalidArgumentException $exception) {
134+
$this->logger->info($exception->getMessage());
135+
136+
continue;
137+
}
138+
129139
}
130140

131141
return $columns;

src/Grid/Column/Collector/DataObject/ObjectBrickCollector.php

+19-11
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
use Pimcore\Model\DataObject\ClassDefinition\Layout;
3434
use Pimcore\Model\DataObject\Objectbrick\Definition as ObjectBrickDefinition;
3535
use Pimcore\Model\DataObject\Objectbrick\Definition\Listing as ObjectBrickListing;
36+
use Psr\Log\LoggerInterface;
3637
use function array_key_exists;
3738

3839
/**
@@ -50,7 +51,8 @@ final class ObjectBrickCollector implements ColumnCollectorInterface, ClassIdInt
5051

5152
public function __construct(
5253
private readonly ClassDefinitionServiceInterface $classDefinitionService,
53-
private readonly ColumnConfigurationServiceInterface $columnConfigurationService
54+
private readonly ColumnConfigurationServiceInterface $columnConfigurationService,
55+
private readonly LoggerInterface $logger
5456
) {
5557
}
5658

@@ -104,16 +106,22 @@ private function buildColumnConfigurations(ObjectBrickDefinition $objectBrick, s
104106
foreach ($dataFields as $dataField) {
105107
$groupName = $objectBrick->getTitle() !== '' ? $objectBrick->getTitle() : $objectBrick->getKey();
106108

107-
$this->configurations[] = $this->columnConfigurationService->buildDataObjectAdapterColumnConfiguration(
108-
new ColumnFieldDefinition($dataField, $groupName, false),
109-
'dataobject.objectbrick',
110-
$fieldname . '.'. $objectBrick->getKey() . '.'. $dataField->getName(),
111-
[
112-
'field' => $fieldname,
113-
'objectBrick' => $objectBrick->getKey(),
114-
'attribute' => $dataField->getName(),
115-
]
116-
);
109+
try {
110+
$this->configurations[] = $this->columnConfigurationService->buildDataObjectAdapterColumnConfiguration(
111+
new ColumnFieldDefinition($dataField, $groupName, false),
112+
'dataobject.objectbrick',
113+
$fieldname . '.'. $objectBrick->getKey() . '.'. $dataField->getName(),
114+
[
115+
'field' => $fieldname,
116+
'objectBrick' => $objectBrick->getKey(),
117+
'attribute' => $dataField->getName(),
118+
]
119+
);
120+
} catch (InvalidArgumentException $exception) {
121+
$this->logger->info($exception->getMessage());
122+
123+
continue;
124+
}
117125
}
118126
}
119127

src/Grid/Column/Collector/DataObject/SystemFieldCollector.php

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public function getColumnConfigurations(array $availableColumnDefinitions): arra
5959
sortable: $availableColumnDefinitions[$type]->isSortable(),
6060
editable: false,
6161
exportable: $availableColumnDefinitions[$type]->isExportable(),
62+
filterable: $availableColumnDefinitions[$type]->isFilterable(),
6263
localizable: false,
6364
locale: null,
6465
type: $availableColumnDefinitions[$type]->getType(),

src/Grid/Column/ColumnDefinitionInterface.php

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ public function getConfig(mixed $config): array;
2424

2525
public function isSortable(): bool;
2626

27+
public function isFilterable(): bool;
28+
2729
public function getFrontendType(): string;
2830

2931
public function isExportable(): bool;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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\Grid\Column\Definition\DataObject;
18+
19+
use Pimcore\Bundle\StudioBackendBundle\Grid\Column\ColumnDefinitionInterface;
20+
21+
/**
22+
* @internal
23+
*/
24+
abstract readonly class AbstractDefinition implements ColumnDefinitionInterface
25+
{
26+
abstract public function getType(): string;
27+
28+
public function getConfig(mixed $config): array
29+
{
30+
return [];
31+
}
32+
33+
public function isSortable(): bool
34+
{
35+
return true;
36+
}
37+
38+
public function isFilterable(): bool
39+
{
40+
return true;
41+
}
42+
43+
abstract public function getFrontendType(): string;
44+
45+
public function isExportable(): bool
46+
{
47+
return true;
48+
}
49+
}

0 commit comments

Comments
 (0)