Skip to content

Commit c6e4554

Browse files
authored
[PageSnippet Import Error] (#22)
* [PageSnippet Import Error] Fix it by introducing Snippet instead of PageSnippet type * [PageSnippet Import Error] Separating PageImportPopulator into three different Populators because of separation of concerns
1 parent 9e1fa87 commit c6e4554

File tree

17 files changed

+439
-44
lines changed

17 files changed

+439
-44
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
# Changelog
22

3+
## 3.0.0
4+
5+
- BC-break: bugfix: Import of exported Page Snippet documents by changing type to `Pimcore\Model\Document\Snippet`
6+
You have to change the key of your already exported YAML files
7+
from `Pimcore\Model\Document\PageSnippet` to `Pimcore\Model\Document\Snippet`
8+
- improvement: Refactoring of PageImportPopulator - separated into three new Populators
9+
310
## 2.1.0
411

512
- feature: [With or Without IDs] Export and Import should be possible without IDs (#20)
13+
- change: You have to change the key of already exported YAML files from `Pimcore\Model\Document` to `Pimcore\Model\Document\Page`
614

715
## 2.0.1
816

config/pimcore/export/documents/converters_populators.yaml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ neusta_converter:
2828
published: ~
2929
path: ~
3030

31-
neusta_pimcore_import_export.export_page_snippet:
32-
target: Neusta\Pimcore\ImportExportBundle\Model\Document\PageSnippet
31+
neusta_pimcore_import_export.export_snippet:
32+
target: Neusta\Pimcore\ImportExportBundle\Model\Document\Snippet
3333
populators:
3434
- Neusta\Pimcore\ImportExportBundle\Populator\IdsPopulator
35-
- neusta_pimcore_import_export.page_snippet.controller.populator
36-
- neusta_pimcore_import_export.page_snippet.editables.populator
35+
- neusta_pimcore_import_export.snippet.controller.populator
36+
- neusta_pimcore_import_export.snippet.editables.populator
3737
- neusta_pimcore_import_export.document.properties.populator
3838
properties:
3939
key: ~
@@ -45,8 +45,8 @@ neusta_converter:
4545
target: Neusta\Pimcore\ImportExportBundle\Model\Document\Page
4646
populators:
4747
- Neusta\Pimcore\ImportExportBundle\Populator\IdsPopulator
48-
- neusta_pimcore_import_export.page_snippet.controller.populator
49-
- neusta_pimcore_import_export.page_snippet.editables.populator
48+
- neusta_pimcore_import_export.snippet.controller.populator
49+
- neusta_pimcore_import_export.snippet.editables.populator
5050
- neusta_pimcore_import_export.page.title.populator
5151
- neusta_pimcore_import_export.document.properties.populator
5252
properties:
@@ -84,7 +84,7 @@ services:
8484
arguments:
8585
$typeToConverterMap:
8686
Pimcore\Model\Document\Page: '@neusta_pimcore_import_export.export_page'
87-
Pimcore\Model\Document\PageSnippet: '@neusta_pimcore_import_export.export_page_snippet'
87+
Pimcore\Model\Document\PageSnippet: '@neusta_pimcore_import_export.export_snippet'
8888
Pimcore\Model\Document\Folder: '@neusta_pimcore_import_export.export_folder'
8989
Pimcore\Model\Document: '@neusta_pimcore_import_export.export_document'
9090

@@ -99,13 +99,13 @@ services:
9999
$sourceProperty: title
100100
$targetProperty: title
101101

102-
neusta_pimcore_import_export.page_snippet.controller.populator:
102+
neusta_pimcore_import_export.snippet.controller.populator:
103103
class: Neusta\ConverterBundle\Populator\PropertyMappingPopulator
104104
arguments:
105105
$sourceProperty: controller
106106
$targetProperty: controller
107107

108-
neusta_pimcore_import_export.page_snippet.editables.populator:
108+
neusta_pimcore_import_export.snippet.editables.populator:
109109
class: Neusta\ConverterBundle\Populator\ArrayConvertingPopulator
110110
arguments:
111111
$converter: '@neusta_pimcore_import_export.editable_converter'

config/pimcore/import/documents/converters_populators.yaml

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ neusta_converter:
2727
- neusta_pimcore_import_export.documents.import.populator.published
2828
- neusta_pimcore_import_export.documents.import.populator.path
2929
- neusta_pimcore_import_export.documents.import.populator.parentId
30-
- Neusta\Pimcore\ImportExportBundle\Populator\PageImportPopulator
30+
- Neusta\Pimcore\ImportExportBundle\Populator\Document\EditablesPopulator
31+
- Neusta\Pimcore\ImportExportBundle\Populator\Document\PropertiesPopulator
32+
- Neusta\Pimcore\ImportExportBundle\Populator\Document\PageTitlePopulator
3133

32-
neusta_pimcore_import_export.import_page_snippet:
33-
target: Pimcore\Model\Document\PageSnippet
34+
neusta_pimcore_import_export.import_snippet:
35+
target: Pimcore\Model\Document\Snippet
3436
populators:
3537
- neusta_pimcore_import_export.documents.import.populator.id
3638
- neusta_pimcore_import_export.documents.import.populator.key
@@ -39,7 +41,8 @@ neusta_converter:
3941
- neusta_pimcore_import_export.documents.import.populator.published
4042
- neusta_pimcore_import_export.documents.import.populator.path
4143
- neusta_pimcore_import_export.documents.import.populator.parentId
42-
- Neusta\Pimcore\ImportExportBundle\Populator\PageImportPopulator
44+
- Neusta\Pimcore\ImportExportBundle\Populator\Document\EditablesPopulator
45+
- Neusta\Pimcore\ImportExportBundle\Populator\Document\PropertiesPopulator
4346

4447
services:
4548
_defaults:
@@ -96,4 +99,6 @@ services:
9699
$targetProperty: parentId
97100
$defaultValue: 0
98101

99-
Neusta\Pimcore\ImportExportBundle\Populator\PageImportPopulator: ~
102+
Neusta\Pimcore\ImportExportBundle\Populator\Document\PropertiesPopulator: ~
103+
Neusta\Pimcore\ImportExportBundle\Populator\Document\EditablesPopulator: ~
104+
Neusta\Pimcore\ImportExportBundle\Populator\Document\PageTitlePopulator: ~

config/services.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ services:
9090
$typeToConverterMap:
9191
Pimcore\Model\Asset: '@neusta_pimcore_import_export.strategy.export_asset'
9292
Pimcore\Model\Document\Page: '@neusta_pimcore_import_export.strategy.export_document'
93-
Pimcore\Model\Document\PageSnippet: '@neusta_pimcore_import_export.strategy.export_document'
93+
Pimcore\Model\Document\Snippet: '@neusta_pimcore_import_export.strategy.export_document'
9494
Pimcore\Model\Document: '@neusta_pimcore_import_export.strategy.export_document'
9595
Pimcore\Model\DataObject: '@neusta_pimcore_import_export.export_object'
9696
$serializer: '@Neusta\Pimcore\ImportExportBundle\Serializer\SerializerStrategy'
@@ -103,7 +103,7 @@ services:
103103
- { name: 'neusta.import_export.merge_strategy', type: 'Pimcore\Model\Document' }
104104
- { name: 'neusta.import_export.merge_strategy', type: 'Pimcore\Model\Document\Folder' }
105105
- { name: 'neusta.import_export.merge_strategy', type: 'Pimcore\Model\Document\Page' }
106-
- { name: 'neusta.import_export.merge_strategy', type: 'Pimcore\Model\Document\PageSnippet' }
106+
- { name: 'neusta.import_export.merge_strategy', type: 'Pimcore\Model\Document\Snippet' }
107107

108108
Neusta\Pimcore\ImportExportBundle\Import\Strategy\ReplaceExistingElementStrategy:
109109
tags:
@@ -133,7 +133,7 @@ services:
133133
- { name: 'neusta.import_export.repository', type: 'Pimcore\Model\Document' }
134134
- { name: 'neusta.import_export.repository', type: 'Pimcore\Model\Document\Folder' }
135135
- { name: 'neusta.import_export.repository', type: 'Pimcore\Model\Document\Page' }
136-
- { name: 'neusta.import_export.repository', type: 'Pimcore\Model\Document\PageSnippet' }
136+
- { name: 'neusta.import_export.repository', type: 'Pimcore\Model\Document\Snippet' }
137137

138138

139139
##############

docs/images/document_model.png

58.3 KB
Loading

src/Model/Document/Page.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Neusta\Pimcore\ImportExportBundle\Model\Document;
44

5-
class Page extends PageSnippet
5+
class Page extends Snippet
66
{
77
public ?string $title = null;
88
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Neusta\Pimcore\ImportExportBundle\Model\Document;
44

5-
class PageSnippet extends Folder
5+
class Snippet extends Folder
66
{
77
public ?string $controller = null;
88
/** @var array<Editable> */
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Neusta\Pimcore\ImportExportBundle\Populator\Document;
4+
5+
use Neusta\ConverterBundle\Converter\Context\GenericContext;
6+
use Neusta\ConverterBundle\Populator;
7+
use Pimcore\Model\Document as PimcoreDocument;
8+
use Psr\Log\LoggerInterface;
9+
10+
/**
11+
* @implements Populator<\ArrayObject<string, mixed>, PimcoreDocument, GenericContext|null>
12+
*/
13+
class EditablesPopulator implements Populator
14+
{
15+
public function __construct(
16+
private readonly ?LoggerInterface $logger = null,
17+
) {
18+
}
19+
20+
/**
21+
* @param \ArrayObject<string, mixed> $source
22+
* @param PimcoreDocument $target
23+
* @param GenericContext|null $ctx
24+
*/
25+
public function populate(object $target, object $source, ?object $ctx = null): void
26+
{
27+
if ($target instanceof PimcoreDocument\PageSnippet) {
28+
/** @var array{type: string, data: mixed} $editable */
29+
foreach ($source['editables'] ?? [] as $key => $editable) {
30+
if (!isset($editable['data'])) {
31+
$this->logger?->warning('Skipping editable with missing required fields', [
32+
'key' => $key,
33+
'editable' => $editable,
34+
]);
35+
continue; // Skip editables with missing required fields
36+
}
37+
$target->setRawEditable((string) $key, $editable['type'], $editable['data']);
38+
}
39+
}
40+
}
41+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Neusta\Pimcore\ImportExportBundle\Populator\Document;
4+
5+
use Neusta\ConverterBundle\Converter\Context\GenericContext;
6+
use Neusta\ConverterBundle\Populator;
7+
use Pimcore\Model\Document as PimcoreDocument;
8+
9+
/**
10+
* @implements Populator<\ArrayObject<string, mixed>, PimcoreDocument, GenericContext|null>
11+
*/
12+
class PageTitlePopulator implements Populator
13+
{
14+
/**
15+
* @param \ArrayObject<string, mixed> $source
16+
* @param PimcoreDocument $target
17+
* @param GenericContext|null $ctx
18+
*/
19+
public function populate(object $target, object $source, ?object $ctx = null): void
20+
{
21+
if ($target instanceof PimcoreDocument\Page && isset($source['title'])) {
22+
$target->setTitle($source['title']);
23+
}
24+
}
25+
}
Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,23 @@
11
<?php declare(strict_types=1);
22

3-
namespace Neusta\Pimcore\ImportExportBundle\Populator;
3+
namespace Neusta\Pimcore\ImportExportBundle\Populator\Document;
44

55
use Neusta\ConverterBundle\Converter\Context\GenericContext;
66
use Neusta\ConverterBundle\Populator;
77
use Neusta\Pimcore\ImportExportBundle\Toolbox\Repository\AssetRepository;
88
use Neusta\Pimcore\ImportExportBundle\Toolbox\Repository\DataObjectRepository;
99
use Neusta\Pimcore\ImportExportBundle\Toolbox\Repository\DocumentRepository;
1010
use Pimcore\Model\Document as PimcoreDocument;
11-
use Psr\Log\LoggerInterface;
1211

1312
/**
1413
* @implements Populator<\ArrayObject<string, mixed>, PimcoreDocument, GenericContext|null>
1514
*/
16-
class PageImportPopulator implements Populator
15+
class PropertiesPopulator implements Populator
1716
{
1817
public function __construct(
1918
private readonly AssetRepository $assetRepository,
2019
private readonly DataObjectRepository $objectRepository,
2120
private readonly DocumentRepository $documentRepository,
22-
private readonly ?LoggerInterface $logger = null,
2321
) {
2422
}
2523

@@ -42,19 +40,5 @@ public function populate(object $target, object $source, ?object $ctx = null): v
4240
}
4341
$target->setProperty($property['key'], $property['type'], $value);
4442
}
45-
46-
if ($target instanceof PimcoreDocument\PageSnippet) {
47-
/** @var array{type: string, data: mixed} $editable */
48-
foreach ($source['editables'] ?? [] as $key => $editable) {
49-
if (!isset($editable['data'])) {
50-
$this->logger?->warning('Skipping editable with missing required fields', [
51-
'key' => $key,
52-
'editable' => $editable,
53-
]);
54-
continue; // Skip editables with missing required fields
55-
}
56-
$target->setRawEditable((string) $key, $editable['type'], $editable['data']);
57-
}
58-
}
5943
}
6044
}

0 commit comments

Comments
 (0)