Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
42ce4ee
[With or Without IDs][Export] export without IDs (id, parentsId); opt…
mike4git Jul 21, 2025
fa73030
[With or Without IDs][Import] import with or without IDs (id, parents…
mike4git Jul 21, 2025
1dbc699
[With or Without IDs][Export][Documents] Add ignore ID checkbox to menu
mike4git Jul 22, 2025
097669f
[With or Without IDs][Export] manage sequence of exported attributes
mike4git Jul 22, 2025
e1a82bd
[With or Without IDs][Export] export menu adapted for Assets & DataOb…
mike4git Jul 22, 2025
36bc9c2
[With or Without IDs][Export] doc adapted
mike4git Jul 22, 2025
18a0ace
[With or Without IDs][Export] label for checkbox corrected
mike4git Jul 22, 2025
dcf9c6e
[With or Without IDs][Import] use ApplicationLogger for errors and infos
mike4git Jul 22, 2025
c8d32ae
[With or Without IDs][Export] use kebap-case for commandline option
mike4git Jul 22, 2025
b47a1ab
[With or Without IDs][Export] remove unused code in JS
mike4git Jul 22, 2025
73340c7
[With or Without IDs][Export] try to fix integration tests by loading…
mike4git Jul 22, 2025
e36b231
[With or Without IDs][Export] fix tests
mike4git Jul 22, 2025
5da074a
[With or Without IDs][Export] add EventSubscriber, Event Dispatching …
lukadschaak Jul 22, 2025
0b0f28b
[With or Without IDs][Export][Import] fixed all tests, cs and phpstan
mike4git Jul 23, 2025
079b56b
[Exporter][Fix] * include properties * export different Document subt…
mike4git Jul 24, 2025
306ae49
[With or Without IDs][Export] fix phpstan
lukadschaak Jul 25, 2025
385ced0
[With or Without IDs][Export] remove Kernel_CLASS from phpunit.xml.dist
lukadschaak Jul 25, 2025
933956f
[With or Without IDs][Export] fix services
lukadschaak Jul 25, 2025
d210ddd
[With or Without IDs][Export] small clean up
lukadschaak Jul 25, 2025
fb75517
[With or With IDs][Review] some resolved conversations
mike4git Jul 28, 2025
fd5b1dd
[With or With IDs][Review] fix failing tests
mike4git Jul 28, 2025
baa2e8b
[With or With IDs][Review] CodeRabbit review fixed
mike4git Jul 28, 2025
f65536d
Update src/Import/EventSubscriber/StatisticsEventSubscriber.php
mike4git Aug 5, 2025
267f49d
[With or With IDs][Review] by J-Cop
mike4git Aug 5, 2025
bdb2635
[With or With IDs][Review] fixed test for WYSIWYG editable
mike4git Aug 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ All import commands follow a similar structure and support the following common
- `--input` or `-i`: Path to the input YAML file (required for import commands).
- `--dry-run`: Perform the operation without persisting data (only available for import commands).

### Notice: WYSIWYG - Editable

For using a correct exporting and importing of WYSIWYG editables in older Pimcore versions (e.g. using `symfony/framework < 6.2.2`) you probably need to configure your Symfony HTML sanitizer as documented here:
https://docs.pimcore.com/platform/2024.4/Pimcore/Documents/Editables/WYSIWYG#extending-symfony-html-sanitizer-configuration

In our integration test we have used the following configuration:

```yaml
tests/app/config/packages/pimcore.yaml
```
because of already known bugs with `<a>` - HTML tag.

## Concepts

### Page Export
Expand Down
7 changes: 5 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,14 @@
"phpstan/phpstan": "^1.10.60",
"phpstan/phpstan-phpunit": "^1.3.16",
"phpstan/phpstan-symfony": "^1.3.8",
"phpunit/phpunit": "^9.5",
"pimcore/admin-ui-classic-bundle": "^1.6",
"phpunit/phpunit": "^9.6",
"pimcore/admin-ui-classic-bundle": "^1.0",
"spatie/phpunit-snapshot-assertions": "^4.2",
"teamneusta/pimcore-testing-framework": "^0.12"
},
"conflict": {
"masterminds/html5": "< 2.8.1"
},
"autoload": {
"psr-4": {
"Neusta\\Pimcore\\ImportExportBundle\\": "src/"
Expand Down
6 changes: 4 additions & 2 deletions config/pimcore/export/assets/converters_populators.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ neusta_converter:
###########################################################
neusta_pimcore_import_export.export_asset_folder:
target: Neusta\Pimcore\ImportExportBundle\Model\Asset\Asset
populators:
- Neusta\Pimcore\ImportExportBundle\Populator\IdsPopulator
properties:
id: ~
key: ~
type: ~
path: ~
parentId: ~

services:
_defaults:
Expand Down Expand Up @@ -87,6 +87,8 @@ services:
###########################################################
# Export Populator (Pimcore Asset -> Asset)
###########################################################
Neusta\Pimcore\ImportExportBundle\Populator\IdsPopulator: ~

neusta_pimcore_import_export.asset.filename.populator:
class: Neusta\ConverterBundle\Populator\PropertyMappingPopulator
arguments:
Expand Down
108 changes: 60 additions & 48 deletions config/pimcore/export/documents/converters_populators.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,51 @@ neusta_converter:
neusta_pimcore_import_export.export_document:
target: Neusta\Pimcore\ImportExportBundle\Model\Document\Document
populators:
- neusta_pimcore_import_export.page.property.language.populator
- neusta_pimcore_import_export.page.property.navigation_title.populator
- neusta_pimcore_import_export.page.property.navigation_name.populator
- Neusta\Pimcore\ImportExportBundle\Populator\IdsPopulator
- neusta_pimcore_import_export.document.properties.populator
properties:
key: ~
type: ~
published: ~
path: ~

neusta_pimcore_import_export.export_folder:
target: Neusta\Pimcore\ImportExportBundle\Model\Document\Folder
populators:
- Neusta\Pimcore\ImportExportBundle\Populator\IdsPopulator
- neusta_pimcore_import_export.document.properties.populator
properties:
key: ~
type: ~
published: ~
path: ~

neusta_pimcore_import_export.export_page_snippet:
target: Neusta\Pimcore\ImportExportBundle\Model\Document\PageSnippet
populators:
- Neusta\Pimcore\ImportExportBundle\Populator\IdsPopulator
- neusta_pimcore_import_export.page_snippet.controller.populator
- neusta_pimcore_import_export.page_snippet.editables.populator
- neusta_pimcore_import_export.document.properties.populator
properties:
key: ~
type: ~
published: ~
path: ~

neusta_pimcore_import_export.export_page:
target: Neusta\Pimcore\ImportExportBundle\Model\Document\Page
populators:
- Neusta\Pimcore\ImportExportBundle\Populator\IdsPopulator
- neusta_pimcore_import_export.page_snippet.controller.populator
- neusta_pimcore_import_export.page_snippet.editables.populator
- neusta_pimcore_import_export.page.title.populator
- neusta_pimcore_import_export.document.properties.populator
properties:
id: ~
key: ~
type: ~
published: ~
path: ~
parentId: ~
controller: ~

neusta_pimcore_import_export.editable_converter:
target: Neusta\Pimcore\ImportExportBundle\Model\Document\Editable
Expand All @@ -29,6 +63,14 @@ neusta_converter:
type: ~
name: ~

neusta_pimcore_import_export.property_converter:
target: Neusta\Pimcore\ImportExportBundle\Model\Property
populators:
- Neusta\Pimcore\ImportExportBundle\Populator\PropertyValuePopulator
properties:
key: name
type: ~

services:
_defaults:
autowire: true
Expand All @@ -42,52 +84,28 @@ services:
arguments:
$typeToConverterMap:
Pimcore\Model\Document\Page: '@neusta_pimcore_import_export.export_page'
Pimcore\Model\Document\Snippet: '@neusta_pimcore_import_export.export_page_snippet'
Pimcore\Model\Document\PageSnippet: '@neusta_pimcore_import_export.export_page_snippet'
Pimcore\Model\Document\Folder: '@neusta_pimcore_import_export.export_folder'

###########################################################
# Export Converter (Document/Folder -> Page)
###########################################################
neusta_pimcore_import_export.export_folder:
alias: neusta_pimcore_import_export.export_document

###########################################################
# Export Converter (Document/PageSnippet -> Page)
###########################################################
neusta_pimcore_import_export.export_page_snippet:
class: Neusta\Pimcore\ImportExportBundle\Converter\ExtendedConverter
arguments:
$converter: '@neusta_pimcore_import_export.export_document'
$postPopulators:
- '@neusta_pimcore_import_export.page.editables.populator'

###########################################################
# Export Converter (Document/Page -> Page)
###########################################################
neusta_pimcore_import_export.export_page:
class: Neusta\Pimcore\ImportExportBundle\Converter\ExtendedConverter
arguments:
$converter: '@neusta_pimcore_import_export.export_page_snippet'
$postPopulators:
- '@neusta_pimcore_import_export.page.controller.populator'
- '@neusta_pimcore_import_export.page.title.populator'
Pimcore\Model\Document: '@neusta_pimcore_import_export.export_document'

###########################################################
# Export Populator (Page -> Page)
###########################################################
Neusta\Pimcore\ImportExportBundle\Populator\IdsPopulator: ~

neusta_pimcore_import_export.page.title.populator:
class: Neusta\ConverterBundle\Populator\PropertyMappingPopulator
arguments:
$sourceProperty: title
$targetProperty: title

neusta_pimcore_import_export.page.controller.populator:
neusta_pimcore_import_export.page_snippet.controller.populator:
class: Neusta\ConverterBundle\Populator\PropertyMappingPopulator
arguments:
$sourceProperty: controller
$targetProperty: controller

neusta_pimcore_import_export.page.editables.populator:
neusta_pimcore_import_export.page_snippet.editables.populator:
class: Neusta\ConverterBundle\Populator\ArrayConvertingPopulator
arguments:
$converter: '@neusta_pimcore_import_export.editable_converter'
Expand All @@ -101,23 +119,17 @@ services:
$targetProperty: 'language'
$skipNull: true

neusta_pimcore_import_export.page.property.navigation_title.populator:
class: Neusta\Pimcore\ImportExportBundle\PimcoreConverter\Populator\PropertyBasedMappingPopulator
arguments:
$propertyKey: 'navigation_title'
$targetProperty: 'navigation_title'
$skipNull: true

neusta_pimcore_import_export.page.property.navigation_name.populator:
class: Neusta\Pimcore\ImportExportBundle\PimcoreConverter\Populator\PropertyBasedMappingPopulator
neusta_pimcore_import_export.document.properties.populator:
class: Neusta\ConverterBundle\Populator\ArrayConvertingPopulator
arguments:
$propertyKey: 'navigation_name'
$targetProperty: 'navigation_name'
$skipNull: true
$converter: '@neusta_pimcore_import_export.property_converter'
$sourceArrayPropertyName: 'properties'
$targetPropertyName: 'properties'

###########################################################
# Export Populator (Editable -> YamlEditable)
###########################################################
neusta_pimcore_import_export.editable.data.populator:
class: Neusta\Pimcore\ImportExportBundle\Populator\EditableDataPopulator

Neusta\Pimcore\ImportExportBundle\Populator\PropertyValuePopulator: ~
11 changes: 9 additions & 2 deletions config/pimcore/export/elements/converters_populators.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,16 @@ neusta_converter:
###########################################################
neusta_pimcore_import_export.export_element:
target: Neusta\Pimcore\ImportExportBundle\Model\Element
populators:
- Neusta\Pimcore\ImportExportBundle\Populator\IdsPopulator
properties:
id: ~
key: ~
type: ~
path: ~
parentId: ~

services:
_defaults:
autowire: true
autoconfigure: true

Neusta\Pimcore\ImportExportBundle\Populator\IdsPopulator: ~
5 changes: 3 additions & 2 deletions config/pimcore/export/objects/converters_populators.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,15 @@ neusta_converter:
neusta_pimcore_import_export.export_object:
target: Neusta\Pimcore\ImportExportBundle\Model\Object\DataObject
populators:
- Neusta\Pimcore\ImportExportBundle\Populator\IdsPopulator
- neusta_pimcore_import_export.export_object.fields.populator
- neusta_pimcore_import_export.export_object.relations.populator
properties:
className: ~
id: ~
key: ~
type: ~
published: ~
path: ~
parentId: ~

neusta_pimcore_import_export.export_object.without.relations:
target: Neusta\Pimcore\ImportExportBundle\Model\Object\DataObject
Expand Down Expand Up @@ -47,6 +46,8 @@ services:
$typeToConverterMap:
Pimcore\Model\DataObject\Concrete: '@neusta_pimcore_import_export.export_object'

Neusta\Pimcore\ImportExportBundle\Populator\IdsPopulator: ~

neusta_pimcore_import_export.export_object.fields.populator:
class: Neusta\Pimcore\ImportExportBundle\Populator\DataObjectExportFieldsPopulator

Expand Down
22 changes: 22 additions & 0 deletions config/pimcore/import/documents/converters_populators.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@ neusta_converter:
# Import Converter (Page -> PimcorePage)
###########################################################
neusta_pimcore_import_export.import_document:
target: Pimcore\Model\Document
populators:
- neusta_pimcore_import_export.documents.import.populator.id
- neusta_pimcore_import_export.documents.import.populator.key
- neusta_pimcore_import_export.documents.import.populator.type
- neusta_pimcore_import_export.documents.import.populator.published
- neusta_pimcore_import_export.documents.import.populator.path
- neusta_pimcore_import_export.documents.import.populator.parentId

neusta_pimcore_import_export.import_page:
target: Pimcore\Model\Document\Page
populators:
- neusta_pimcore_import_export.documents.import.populator.id
Expand All @@ -19,6 +29,18 @@ neusta_converter:
- neusta_pimcore_import_export.documents.import.populator.parentId
- Neusta\Pimcore\ImportExportBundle\Populator\PageImportPopulator

neusta_pimcore_import_export.import_page_snippet:
target: Pimcore\Model\Document\PageSnippet
populators:
- neusta_pimcore_import_export.documents.import.populator.id
- neusta_pimcore_import_export.documents.import.populator.key
- neusta_pimcore_import_export.documents.import.populator.controller
- neusta_pimcore_import_export.documents.import.populator.type
- neusta_pimcore_import_export.documents.import.populator.published
- neusta_pimcore_import_export.documents.import.populator.path
- neusta_pimcore_import_export.documents.import.populator.parentId
- Neusta\Pimcore\ImportExportBundle\Populator\PageImportPopulator

services:
_defaults:
autowire: true
Expand Down
Loading