[BUGFIX] Invalid relations of IRRE records in workspaces 74/27774/16
authorOliver Hader <oliver@typo3.org>
Mon, 17 Mar 2014 13:47:43 +0000 (14:47 +0100)
committerOliver Hader <oliver.hader@typo3.org>
Sat, 22 Mar 2014 00:55:55 +0000 (01:55 +0100)
* general -> always use live id as pointer value
* create records -> automatically fill placeholder pointers
* copy records -> currently leads to problems with sorting
* move records -> follow and create child move placeholders
* delete records -> forward delete data in copy(!) process
* ReferenceIndex needs to hold the most specific relations
  since the CommandMap handler is based on this information
* ReleationHandler is extended for IRRE references to fetch
  the live default parent pointer automatically (this new
  behaviour can be disabled by public methods for each
  RelationHandler instance)
* The method version_swap_procBasedOnFieldType of the version
  DataHandlerHook is completely removed since IRRE records are
  now referenced using the live default parent pointer value
* UserTSconfig property options.workspaces.swapMode is set
  to "pages" per default - thus, if a page gets published all
  accordant records on that page are published as well

Resolves: #56376
Releases: 6.2
Change-Id: I75248d10b000de73ca623770f07e8c2e89d4cdd8
Reviewed-on: https://review.typo3.org/27774
Reviewed-by: Oliver Hader
Tested-by: Oliver Hader
170 files changed:
typo3/sysext/backend/Classes/Form/DataPreprocessor.php
typo3/sysext/backend/Classes/Utility/BackendUtility.php
typo3/sysext/core/Classes/DataHandling/DataHandler.php
typo3/sysext/core/Classes/Database/ReferenceIndex.php
typo3/sysext/core/Classes/Database/RelationHandler.php
typo3/sysext/core/Tests/Functional/DataHandling/IRRE/CSV/AbstractActionTestCase.php
typo3/sysext/core/Tests/Functional/DataHandling/IRRE/ForeignField/AbstractActionTestCase.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/ExtTables/ext_tables.1ncsv.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/ExtTables/ext_tables.1nff.php
typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial/Configuration/ExtTables/ext_tables.general.php
typo3/sysext/version/Classes/DataHandler/CommandMap.php
typo3/sysext/version/Classes/Dependency/DependencyEntityFactory.php
typo3/sysext/version/Classes/Dependency/DependencyResolver.php
typo3/sysext/version/Classes/Dependency/ElementEntity.php
typo3/sysext/version/Classes/Hook/DataHandlerHook.php
typo3/sysext/workspaces/Classes/ExtDirect/ActionHandler.php
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/AbstractOneToNTestCase.php
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/AbstractTestCase.php
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/AbstractActionTestCase.php
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/ActionTest.php
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/changeParentContentSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/copyPage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/copyPageWHotelBeforeParentContent.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/copyParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/createNCopyParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/createNCopyParentContentNHotelNOfferChildrenNDiscardCopiedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/createNLocalizeParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardLocalizedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/createParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/deleteParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/localizeParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/modifyNDiscardNModifyParentWHotelChild.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/modifyOnlyHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/modifyParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/modifyParentNAddHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/modifyParentNChangeHotelChildrenSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/modifyParentNDeleteHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/modifyParentNHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/modifyParentNHotelChildNDiscardAll.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/modifyParentNHotelChildNDiscardModifiedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/moveParentContentToDifferentPage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/moveParentContentToDifferentPageNChangeSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/ActionTest.php
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/changeParentContentSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/copyPage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/copyPageWHotelBeforeParentContent.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/copyParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/createNCopyParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/createNCopyParentContentNHotelNOfferChildrenNDiscardCopiedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/createNLocalizeParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardLocalizedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/createParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/deletePage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/deleteParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/localizeParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/modifyNDiscardNModifyParentWHotelChild.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/modifyOnlyHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/modifyParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/modifyParentNAddHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/modifyParentNChangeHotelChildrenSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/modifyParentNDeleteHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/modifyParentNHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/modifyParentNHotelChildNDiscardAll.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/modifyParentNHotelChildNDiscardModifiedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/moveParentContentToDifferentPage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/moveParentContentToDifferentPageNChangeSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/ActionTest.php
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/changeParentContentSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/copyPage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/copyPageWHotelBeforeParentContent.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/copyParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/createNCopyParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/createNCopyParentContentNHotelNOfferChildrenNDiscardCopiedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/createNLocalizeParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardLocalizedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/createParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/deletePage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/deleteParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/localizeParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/modifyNDiscardNModifyParentWHotelChild.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/modifyOnlyHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/modifyParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/modifyParentNAddHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/modifyParentNChangeHotelChildrenSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/modifyParentNDeleteHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/modifyParentNHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/modifyParentNHotelChildNDiscardAll.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/modifyParentNHotelChildNDiscardModifiedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/moveParentContentToDifferentPage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/PublishAll/DataSet/moveParentContentToDifferentPageNChangeSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/AbstractActionTestCase.php
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/ActionTest.php
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/changeParentContentSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/copyPage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/copyPageWHotelBeforeParentContent.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/copyParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/createNCopyParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/createNCopyParentContentNHotelNOfferChildrenNDiscardCopiedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/createNLocalizeParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardLocalizedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/createParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/deleteParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/localizeParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/modifyNDiscardNModifyParentWHotelChild.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/modifyOnlyHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/modifyParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/modifyParentNAddHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/modifyParentNChangeHotelChildrenSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/modifyParentNDeleteHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/modifyParentNHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/modifyParentNHotelChildNDiscardAll.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/modifyParentNHotelChildNDiscardModifiedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/moveParentContentToDifferentPage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Modify/DataSet/moveParentContentToDifferentPageNChangeSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/ActionTest.php
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/changeParentContentSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/copyPage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/copyPageWHotelBeforeParentContent.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/createNCopyParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/createNCopyParentContentNHotelNOfferChildrenNDiscardCopiedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/createNLocalizeParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardLocalizedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/deletePage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/deleteParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/localizeParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/modifyNDiscardNModifyParentWHotelChild.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/modifyOnlyHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/modifyParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/modifyParentNAddHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/modifyParentNChangeHotelChildrenSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/modifyParentNDeleteHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/modifyParentNHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/modifyParentNHotelChildNDiscardAll.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/modifyParentNHotelChildNDiscardModifiedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/moveParentContentToDifferentPage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/Publish/DataSet/moveParentContentToDifferentPageNChangeSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/ActionTest.php
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/changeParentContentSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/copyPage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/copyPageWHotelBeforeParentContent.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/createNCopyParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/createNCopyParentContentNHotelNOfferChildrenNDiscardCopiedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/createNLocalizeParentContentNHotelNOfferChildren.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardLocalizedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/deletePage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/deleteParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/localizeParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/modifyNDiscardNModifyParentWHotelChild.csv [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/modifyOnlyHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/modifyParentContent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/modifyParentNAddHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/modifyParentNChangeHotelChildrenSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/modifyParentNDeleteHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/modifyParentNHotelChild.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/modifyParentNHotelChildNDiscardAll.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/modifyParentNHotelChildNDiscardModifiedParent.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/moveParentContentToDifferentPage.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/ForeignField/PublishAll/DataSet/moveParentContentToDifferentPageNChangeSorting.csv
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/OneToNCSVTest.php
typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/OneToNForeignFieldTest.php
typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/AbstractActionTestCase.php
typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/ActionTest.php
typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/copyPage.csv
typo3/sysext/workspaces/ext_localconf.php

index 9527fbc..effe8a5 100644 (file)
@@ -815,9 +815,10 @@ class DataPreprocessor {
         * @todo Define visibility
         */
        public function getDataIdList($elements, $fieldConfig, $row, $table) {
+               $liveDefaultId = $this->getLiveDefaultId($table, $row['uid']);
                $loadDB = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Database\\RelationHandler');
                $loadDB->registerNonTableValues = $fieldConfig['config']['allowNonIdValues'] ? 1 : 0;
-               $loadDB->start(implode(',', $elements), $fieldConfig['config']['foreign_table'] . ',' . $fieldConfig['config']['neg_foreign_table'], $fieldConfig['config']['MM'], $row['uid'], $table, $fieldConfig['config']);
+               $loadDB->start(implode(',', $elements), $fieldConfig['config']['foreign_table'] . ',' . $fieldConfig['config']['neg_foreign_table'], $fieldConfig['config']['MM'], $liveDefaultId, $table, $fieldConfig['config']);
                $idList = $loadDB->convertPosNeg($loadDB->getValueArray(), $fieldConfig['config']['foreign_table'], $fieldConfig['config']['neg_foreign_table']);
                return $idList;
        }
@@ -937,4 +938,20 @@ class DataPreprocessor {
                return $GLOBALS['LANG']->sL($in);
        }
 
+       /**
+        * Gets the record uid of the live default record. If already
+        * pointing to the live record, the submitted record uid is returned.
+        *
+        * @param string $tableName
+        * @param int $id
+        * @return int
+        */
+       protected function getLiveDefaultId($tableName, $id) {
+               $liveDefaultId = BackendUtility::getLiveVersionIdOfRecord($tableName, $id);
+               if ($liveDefaultId === NULL) {
+                       $liveDefaultId = $id;
+               }
+               return $liveDefaultId;
+       }
+
 }
index 66af510..67b3ca4 100644 (file)
@@ -4052,10 +4052,21 @@ class BackendUtility {
         * Determines whether a table is enabled for workspaces.
         *
         * @param string $table Name of the table to be checked
-        * @return boolean
+        * @return bool
         */
        static public function isTableWorkspaceEnabled($table) {
-               return isset($GLOBALS['TCA'][$table]['ctrl']['versioningWS']) && $GLOBALS['TCA'][$table]['ctrl']['versioningWS'];
+               return !empty($GLOBALS['TCA'][$table]['ctrl']['versioningWS']);
+       }
+
+       /**
+        * Determines whether a table is aware of using move placeholders,
+        * which means 'versioningWS' is set to 2.
+        *
+        * @param string $table
+        * @return bool
+        */
+       static public function isTableMovePlaceholderAware($table) {
+               return (self::isTableWorkspaceEnabled($table) && (int)$GLOBALS['TCA'][$table]['ctrl']['versioningWS'] === 2);
        }
 
        /**
index a1e4108..d38c970 100644 (file)
@@ -3386,13 +3386,28 @@ class DataHandler {
                                        } else {
                                                if (!\TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($realDestPid)) {
                                                        $newId = $this->copyRecord($v['table'], $v['id'], -$v['id']);
-                                               } elseif ($realDestPid == -1 && BackendUtility::isTableWorkspaceEnabled($v['table'])) {
-                                                       $workspaceVersion = BackendUtility::getWorkspaceVersionOfRecord($this->BE_USER->workspace, $v['table'], $v['id'], 'uid');
-                                                       // If workspace version does not exist, create a new one:
-                                                       if ($workspaceVersion === FALSE) {
-                                                               $newId = $this->versionizeRecord($v['table'], $v['id'], isset($workspaceOptions['label']) ? $workspaceOptions['label'] : 'Auto-created for WS #' . $this->BE_USER->workspace, isset($workspaceOptions['delete']) ? $workspaceOptions['delete'] : FALSE);
+                                               // If the destination page id is a NEW string, keep it on the same page
+                                               } elseif ($this->BE_USER->workspace > 0 && BackendUtility::isTableWorkspaceEnabled($v['table'])) {
+                                                       // A filled $workspaceOptions indicated that this call
+                                                       // has it's origin in previous versionizeRecord() processing
+                                                       if (count($workspaceOptions)) {
+                                                               // Versions use live default id, thus the "new"
+                                                               // id is the original live default child record
+                                                               $newId = $v['id'];
+                                                               $this->versionizeRecord(
+                                                                       $v['table'], $v['id'],
+                                                                       (isset($workspaceOptions['label']) ? $workspaceOptions['label'] : 'Auto-created for WS #' . $this->BE_USER->workspace),
+                                                                       (isset($workspaceOptions['delete']) ? $workspaceOptions['delete'] : FALSE)
+                                                               );
+                                                       // Otherwise just use plain copyRecord() to create placeholders etc.
                                                        } else {
-                                                               $newId = $workspaceVersion['uid'];
+                                                               // If a record has been copied already during this request,
+                                                               // prevent superfluous duplication and use the existing copy
+                                                               if (isset($this->copyMappingArray[$v['table']][$v['id']])) {
+                                                                       $newId = $this->copyMappingArray[$v['table']][$v['id']];
+                                                               } else {
+                                                                       $newId = $this->copyRecord($v['table'], $v['id'], $realDestPid);
+                                                               }
                                                        }
                                                } else {
                                                        // If a record has been copied already during this request,
@@ -4746,25 +4761,27 @@ class DataHandler {
                                                                        $overrideArray[$GLOBALS['TCA'][$table]['ctrl']['editlock']] = 0;
                                                                }
                                                                // Checking if the record already has a version in the current workspace of the backend user
-                                                               $workspaceCheck = TRUE;
                                                                if ($this->BE_USER->workspace !== 0) {
                                                                        // Look for version already in workspace:
-                                                                       $workspaceCheck = !BackendUtility::getWorkspaceVersionOfRecord($this->BE_USER->workspace, $table, $id, 'uid');
+                                                                       $versionRecord = BackendUtility::getWorkspaceVersionOfRecord($this->BE_USER->workspace, $table, $id, 'uid');
                                                                }
-                                                               if ($workspaceCheck) {
+                                                               // Create new version of the record and return the new uid
+                                                               if (empty($versionRecord['uid'])) {
                                                                        // Create raw-copy and return result:
                                                                        // The information of the label to be used for the workspace record
                                                                        // as well as the information whether the record shall be removed
                                                                        // must be forwarded (creating remove placeholders on a workspace are
                                                                        // done by copying the record and override several fields).
-                                                                       $workspaceOptions = array();
-                                                                       if ($delete) {
-                                                                               $workspaceOptions['delete'] = $delete;
-                                                                               $workspaceOptions['label'] = $label;
-                                                                       }
+                                                                       $workspaceOptions = array(
+                                                                               'delete' => $delete,
+                                                                               'label' => $label,
+                                                                       );
                                                                        return $this->copyRecord_raw($table, $id, -1, $overrideArray, $workspaceOptions);
+                                                               // Reuse the existing record and return its uid
+                                                               // (prior to TYPO3 CMS 6.2, an error was thrown here, which
+                                                               // did not make much sense since the information is available)
                                                                } else {
-                                                                       $this->newlog('Record "' . $table . ':' . $id . '" you wanted to versionize was already a version in the workspace (wsid=' . $this->BE_USER->workspace . ')!', 1);
+                                                                       return $versionRecord['uid'];
                                                                }
                                                        } else {
                                                                $this->newlog('Record cannot be deleted: ' . $this->cannotDeleteRecord($table, $id), 1);
@@ -5071,6 +5088,16 @@ class DataHandler {
                                /** @var $dbAnalysis \TYPO3\CMS\Core\Database\RelationHandler */
                                $dbAnalysis = $this->createRelationHandlerInstance();
                                $dbAnalysis->start($value, $conf['foreign_table'], '', 0, $table, $conf);
+
+                               // Keep original (live) item array and update values for specific versioned records
+                               $originalItemArray = $dbAnalysis->itemArray;
+                               foreach ($dbAnalysis->itemArray as &$item) {
+                                       $versionedId = $this->getAutoVersionId($item['table'], $item['id']);
+                                       if (!empty($versionedId)) {
+                                               $item['id'] = $versionedId;
+                                       }
+                               }
+
                                // Update child records if using pointer fields ('foreign_field'):
                                if ($inlineType == 'field') {
                                        $dbAnalysis->writeForeignField($conf, $uid, $theUidToUpdate);
@@ -5085,7 +5112,7 @@ class DataHandler {
                                // Update child records if change to pid is required (only if the current record is not on a workspace):
                                if ($thePidToUpdate) {
                                        $updateValues = array('pid' => $thePidToUpdate);
-                                       foreach ($dbAnalysis->itemArray as $v) {
+                                       foreach ($originalItemArray as $v) {
                                                if ($v['id'] && $v['table'] && is_null(BackendUtility::getLiveVersionIdOfRecord($v['table'], $v['id']))) {
                                                        $GLOBALS['TYPO3_DB']->exec_UPDATEquery($v['table'], 'uid=' . (int)$v['id'], $updateValues);
                                                }
@@ -7476,4 +7503,5 @@ class DataHandler {
        protected function createRelationHandlerInstance() {
                return GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Database\\RelationHandler');
        }
+
 }
index 29a023f..7252247 100644 (file)
@@ -603,8 +603,14 @@ class ReferenceIndex {
         * @todo Define visibility
         */
        public function getRelations_procDB($value, $conf, $uid, $table = '', $field = '') {
+               // Get IRRE relations
+               if ($conf['type'] === 'inline' && !empty($conf['foreign_table']) && empty($conf['MM'])) {
+                       $dbAnalysis = $this->getRelationHandler();
+                       $dbAnalysis->setUseLiveReferenceIds(FALSE);
+                       $dbAnalysis->start($value, $conf['foreign_table'], '', $uid, $table, $conf);
+                       return $dbAnalysis->itemArray;
                // DB record lists:
-               if ($this->isReferenceField($conf)) {
+               } elseif ($this->isReferenceField($conf)) {
                        $allowedTables = $conf['type'] == 'group' ? $conf['allowed'] : $conf['foreign_table'] . ',' . $conf['neg_foreign_table'];
                        if ($conf['MM_opposite_field']) {
                                return array();
@@ -613,6 +619,7 @@ class ReferenceIndex {
                        $dbAnalysis->start($value, $allowedTables, $conf['MM'], $uid, $table, $conf);
                        return $dbAnalysis->itemArray;
                } elseif ($conf['type'] == 'inline' && $conf['foreign_table'] == 'sys_file_reference') {
+                       // @todo It looks like this was never called before since isReferenceField also checks for type 'inline' and any 'foreign_table'
                        $files = (array)$GLOBALS['TYPO3_DB']->exec_SELECTgetRows('uid_local', 'sys_file_reference', ('tablenames=\'' . $table . '\' AND fieldname=\'' . $field . '\' AND uid_foreign=' . $uid . ' AND deleted=0'));
                        $fileArray = array();
                        foreach ($files as $fileUid) {
@@ -998,4 +1005,11 @@ class ReferenceIndex {
                return array($headerContent, $bodyContent, count($errors));
        }
 
+       /**
+        * @return RelationHandler
+        */
+       protected function getRelationHandler() {
+               return GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Database\\RelationHandler');
+       }
+
 }
index 2efd0ba..002ad9a 100644 (file)
@@ -219,6 +219,16 @@ class RelationHandler {
        protected $updateReferenceIndex = TRUE;
 
        /**
+        * @var bool
+        */
+       protected $useLiveParentIds = TRUE;
+
+       /**
+        * @var bool
+        */
+       protected $useLiveReferenceIds = TRUE;
+
+       /**
         * This array will be filled by getFromDB().
         *
         * @var array
@@ -238,6 +248,7 @@ class RelationHandler {
         * @todo Define visibility
         */
        public function start($itemlist, $tablelist, $MMtable = '', $MMuid = 0, $currentTable = '', $conf = array()) {
+               $conf = (array)$conf;
                // SECTION: MM reverse relations
                $this->MM_is_foreign = (boolean)$conf['MM_opposite_field'];
                $this->MM_oppositeField = $conf['MM_opposite_field'];
@@ -302,14 +313,14 @@ class RelationHandler {
                                $this->readMM($MMtable, $MMuid);
                        } else {
                                // Revert to readList() for new records in order to load possible default values from $itemlist
-                               $this->readList($itemlist);
+                               $this->readList($itemlist, $conf);
                        }
                } elseif ($MMuid && $conf['foreign_field']) {
                        // If not MM but foreign_field, the read the records by the foreign_field
                        $this->readForeignField($MMuid, $conf);
                } else {
                        // If not MM, then explode the itemlist by "," and traverse the list:
-                       $this->readList($itemlist);
+                       $this->readList($itemlist, $conf);
                        // Do automatic default_sortby, if any
                        if ($conf['foreign_default_sortby']) {
                                $this->sortList($conf['foreign_default_sortby']);
@@ -354,13 +365,28 @@ class RelationHandler {
        }
 
        /**
+        * @param bool $useLiveParentIds
+        */
+       public function setUseLiveParentIds($useLiveParentIds) {
+               $this->useLiveParentIds = (bool)$useLiveParentIds;
+       }
+
+       /**
+        * @param bool $useLiveReferences
+        */
+       public function setUseLiveReferenceIds($useLiveReferenceIds) {
+               $this->useLiveReferenceIds = (bool)$useLiveReferenceIds;
+       }
+
+       /**
         * Explodes the item list and stores the parts in the internal arrays itemArray and tableArray from MM records.
         *
         * @param string $itemlist Item list
+        * @param array $configuration Parent field configuration
         * @return void
         * @todo Define visibility
         */
-       public function readList($itemlist) {
+       public function readList($itemlist, array $configuration) {
                if ((string) trim($itemlist) != '') {
                        $tempItemArray = GeneralUtility::trimExplode(',', $itemlist);
                        // Changed to trimExplode 31/3 04; HMENU special type "list" didn't work
@@ -400,6 +426,34 @@ class RelationHandler {
                                        $this->nonTableArray[] = $tempItemArray[$key];
                                }
                        }
+
+                       // Skip if not dealing with IRRE in a CSV list on a workspace
+                       if ($configuration['type'] !== 'inline' || empty($configuration['foreign_table']) || !empty($configuration['foreign_field'])
+                               || !empty($configuration['MM']) || count($this->tableArray) !== 1 || empty($this->tableArray[$configuration['foreign_table']])
+                               || (int)$GLOBALS['BE_USER']->workspace === 0 || !BackendUtility::isTableWorkspaceEnabled($configuration['foreign_table'])) {
+                               return;
+                       }
+
+                       // Fetch live record data
+                       if ($this->useLiveReferenceIds) {
+                               foreach ($this->itemArray as &$item) {
+                                       $item['id'] = $this->getLiveDefaultId($item['table'], $item['id']);
+                               }
+                       // Directly overlay workspace data
+                       } else {
+                               $rows = array();
+                               $foreignTable = $configuration['foreign_table'];
+                               foreach ($this->tableArray[$foreignTable] as $itemId) {
+                                       $rows[$itemId] = array('uid' => $itemId);
+                               }
+                               $this->itemArray = array();
+                               foreach ($this->getRecordVersionsIds($foreignTable, $rows) as $row) {
+                                       $this->itemArray[] = array(
+                                               'id' => $row['uid'],
+                                               'table' => $foreignTable,
+                                       );
+                               }
+                       }
                }
        }
 
@@ -704,6 +758,10 @@ class RelationHandler {
         * @todo Define visibility
         */
        public function readForeignField($uid, $conf) {
+               if ($this->useLiveParentIds) {
+                       $uid = $this->getLiveDefaultId($this->currentTable, $uid);
+               }
+
                $key = 0;
                $uid = (int)$uid;
                $foreign_table = $conf['foreign_table'];
@@ -729,10 +787,10 @@ class RelationHandler {
                foreach ($foreign_match_fields as $field => $value) {
                        $whereClause .= ' AND ' . $field . '=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($value, $foreign_table);
                }
-               // Select children in the same workspace:
-               if (BackendUtility::isTableWorkspaceEnabled($this->currentTable) && BackendUtility::isTableWorkspaceEnabled($foreign_table)) {
-                       $currentRecord = BackendUtility::getRecord($this->currentTable, $uid, 't3ver_wsid', '', $useDeleteClause);
-                       $whereClause .= BackendUtility::getWorkspaceWhereClause($foreign_table, $currentRecord['t3ver_wsid']);
+               // Select children from the live(!) workspace only
+               if (BackendUtility::isTableWorkspaceEnabled($foreign_table)) {
+                       $workspaceList = '0,' . (int)$GLOBALS['BE_USER']->workspace;
+                       $whereClause .= ' AND ' . $foreign_table . '.t3ver_wsid IN (' . $workspaceList . ') AND ' . $foreign_table . '.pid<>-1';
                }
                // Get the correct sorting field
                // Specific manual sortby for data handled by this field
@@ -763,8 +821,11 @@ class RelationHandler {
                // Strip a possible "ORDER BY" in front of the $sortby value
                $sortby = $GLOBALS['TYPO3_DB']->stripOrderBy($sortby);
                // Get the rows from storage
-               $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('uid', $foreign_table, $whereClause, '', $sortby);
+               $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('uid', $foreign_table, $whereClause, '', $sortby, '', 'uid');
                if (count($rows)) {
+                       if (BackendUtility::isTableWorkspaceEnabled($foreign_table) && !$this->useLiveReferenceIds) {
+                               $rows = $this->getRecordVersionsIds($foreign_table, $rows);
+                       }
                        foreach ($rows as $row) {
                                $this->itemArray[$key]['id'] = $row['uid'];
                                $this->itemArray[$key]['table'] = $foreign_table;
@@ -785,6 +846,13 @@ class RelationHandler {
         * @todo Define visibility
         */
        public function writeForeignField($conf, $parentUid, $updateToUid = 0, $skipSorting = FALSE) {
+               if ($this->useLiveParentIds) {
+                       $parentUid = $this->getLiveDefaultId($this->currentTable, $parentUid);
+                       if (!empty($updateToUid)) {
+                               $updateToUid = $this->getLiveDefaultId($this->currentTable, $updateToUid);
+                       }
+               }
+
                $c = 0;
                $foreign_table = $conf['foreign_table'];
                $foreign_field = $conf['foreign_field'];
@@ -797,15 +865,15 @@ class RelationHandler {
                        if (!(MathUtility::canBeInterpretedAsInteger($updateToUid) && $updateToUid > 0)) {
                                $updateToUid = 0;
                        }
-                       $considerWorkspaces = $GLOBALS['BE_USER']->workspace !== 0 && BackendUtility::isTableWorkspaceEnabled($foreign_table);
-                       $fields = 'uid,' . $foreign_field;
+                       $considerWorkspaces = ($GLOBALS['BE_USER']->workspace !== 0 && BackendUtility::isTableWorkspaceEnabled($foreign_table));
+                       $fields = 'uid,pid,' . $foreign_field;
                        // Consider the symmetric field if defined:
                        if ($symmetric_field) {
                                $fields .= ',' . $symmetric_field;
                        }
                        // Consider workspaces if defined and currently used:
                        if ($considerWorkspaces) {
-                               $fields .= ',' . 't3ver_state,t3ver_oid';
+                               $fields .= ',t3ver_wsid,t3ver_state,t3ver_oid';
                        }
                        // Update all items
                        foreach ($this->itemArray as $val) {
@@ -821,7 +889,6 @@ class RelationHandler {
                                        $isOnSymmetricSide = self::isOnSymmetricSide($parentUid, $conf, $row);
                                }
                                $updateValues = $foreign_match_fields;
-                               $workspaceValues = array();
                                // No update to the uid is requested, so this is the normal behaviour
                                // just update the fields and care about sorting
                                if (!$updateToUid) {
@@ -854,7 +921,7 @@ class RelationHandler {
                                                        $sortby = $GLOBALS['TYPO3_DB']->stripOrderBy($sortby);
                                                }
                                                if ($sortby) {
-                                                       $updateValues[$sortby] = ($workspaceValues[$sortby] = ++$c);
+                                                       $updateValues[$sortby] = ++$c;
                                                }
                                        }
                                } else {
@@ -870,13 +937,10 @@ class RelationHandler {
                                        $this->updateRefIndex($table, $uid);
                                }
                                // Update accordant fields in the database for workspaces overlays/placeholders:
-                               if (count($workspaceValues) && $considerWorkspaces) {
-                                       if (
-                                               isset($row['t3ver_oid'])
-                                               && $row['t3ver_oid']
-                                               && VersionState::cast($row['t3ver_state'])->equals(VersionState::NEW_PLACEHOLDER_VERSION)
-                                       ) {
-                                               $GLOBALS['TYPO3_DB']->exec_UPDATEquery($table, 'uid=' . (int)$row['t3ver_oid'], $workspaceValues);
+                               if ($considerWorkspaces) {
+                                       // It's the specific versioned record -> update placeholder (if any)
+                                       if (!empty($row['t3ver_oid']) && VersionState::cast($row['t3ver_state'])->equals(VersionState::NEW_PLACEHOLDER_VERSION)) {
+                                               $GLOBALS['TYPO3_DB']->exec_UPDATEquery($table, 'uid=' . (int)$row['t3ver_oid'], $updateValues);
                                        }
                                }
                        }
@@ -1081,4 +1145,85 @@ class RelationHandler {
                return $referenceValues;
        }
 
+       /**
+        * @param string $tableName
+        * @param array $records
+        * @return array
+        */
+       protected function getRecordVersionsIds($tableName, array $records) {
+               $workspaceId = (int)$GLOBALS['BE_USER']->workspace;
+               $liveIds = array_map('intval', $this->extractValues($records, 'uid'));
+               $liveIdList = implode(',', $liveIds);
+
+               if (BackendUtility::isTableMovePlaceholderAware($tableName)) {
+                       $versions = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
+                               'uid,t3ver_move_id',
+                               $tableName,
+                               't3ver_state=3 AND t3ver_wsid=' . $workspaceId . ' AND t3ver_move_id IN (' . $liveIdList . ')'
+                       );
+
+                       if (!empty($versions)) {
+                               foreach ($versions as $version) {
+                                       $liveReferenceId = $version['t3ver_move_id'];
+                                       $movePlaceholderId = $version['uid'];
+                                       if (isset($records[$liveReferenceId]) && $records[$movePlaceholderId]) {
+                                               $records[$movePlaceholderId] = $records[$liveReferenceId];
+                                               unset($records[$liveReferenceId]);
+                                       }
+                               }
+                               $liveIds = array_map('intval', $this->extractValues($records, 'uid'));
+                               $records = array_combine($liveIds, array_values($records));
+                               $liveIdList = implode(',', $liveIds);
+                       }
+               }
+
+               $versions = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
+                       'uid,t3ver_oid,t3ver_state',
+                       $tableName,
+                       'pid=-1 AND t3ver_oid IN (' . $liveIdList . ') AND t3ver_wsid=' . $workspaceId,
+                       '',
+                       't3ver_state DESC'
+               );
+
+               if (!empty($versions)) {
+                       foreach ($versions as $version) {
+                               $liveId = $version['t3ver_oid'];
+                               if (isset($records[$liveId])) {
+                                       $records[$liveId] = $version;
+                               }
+                       }
+               }
+
+               return $records;
+       }
+
+       /**
+        * @param array $array
+        * @param string $fieldName
+        * @return array
+        */
+       protected function extractValues(array $array, $fieldName) {
+               $values = array();
+               foreach ($array as $item) {
+                       $values[] = $item[$fieldName];
+               }
+               return $values;
+       }
+
+       /**
+        * Gets the record uid of the live default record. If already
+        * pointing to the live record, the submitted record uid is returned.
+        *
+        * @param string $tableName
+        * @param int $id
+        * @return int
+        */
+       protected function getLiveDefaultId($tableName, $id) {
+               $liveDefaultId = BackendUtility::getLiveVersionIdOfRecord($tableName, $id);
+               if ($liveDefaultId === NULL) {
+                       $liveDefaultId = $id;
+               }
+               return $liveDefaultId;
+       }
+
 }
index 5c3c882..ec42c1c 100644 (file)
@@ -238,7 +238,7 @@ abstract class AbstractActionTestCase extends \TYPO3\CMS\Core\Tests\Functional\D
 
        /**
         * @test
-        * @see DataSet/Assertion/copyPageRecord.csv
+        * @see DataSet/Assertion/copyPageWHotelBeforeParentContent.csv
         */
        public function copyPageWithHotelBeforeParentContent() {
                // Ensure hotels get processed first
index bcb4ebb..d87cc2f 100644 (file)
@@ -238,7 +238,7 @@ abstract class AbstractActionTestCase extends \TYPO3\CMS\Core\Tests\Functional\D
 
        /**
         * @test
-        * @see DataSet/Assertion/copyPageRecord.csv
+        * @see DataSet/Assertion/copyPageWHotelBeforeParentContent.csv
         */
        public function copyPageWithHotelBeforeParentContent() {
                // Ensure hotels get processed first
index 5f4f670..10eeb10 100644 (file)
@@ -20,6 +20,8 @@ $TCA['tx_irretutorial_1ncsv_hotel'] = array(
                'iconfile' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extRelPath($_EXTKEY).'Resources/Public/Icons/icon_tx_irretutorial_hotel.gif',
                'versioningWS' => 2,
                'origUid' => 't3_origuid',
+               'shadowColumnsForNewPlaceholders' => 'offers',
+               'shadowColumnsForMovePlaceholders' => 'offers',
                'dividers2tabs' => TRUE,
        ),
        'feInterface' => array(
@@ -49,6 +51,8 @@ $TCA['tx_irretutorial_1ncsv_offer'] = array(
                'iconfile' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extRelPath($_EXTKEY).'Resources/Public/Icons/icon_tx_irretutorial_offer.gif',
                'versioningWS' => 2,
                'origUid' => 't3_origuid',
+               'shadowColumnsForNewPlaceholders' => 'prices',
+               'shadowColumnsForMovePlaceholders' => 'prices',
                'dividers2tabs' => TRUE,
        ),
        'feInterface' => array(
index d6deab1..1e2097e 100644 (file)
@@ -22,6 +22,7 @@ $TCA['tx_irretutorial_1nff_hotel'] = array(
                'origUid' => 't3_origuid',
                // @see http://forge.typo3.org/issues/29278 which solves it implicitly in the Core
                // 'shadowColumnsForNewPlaceholders' => 'parentid,parenttable',
+               'shadowColumnsForMovePlaceholders' => 'parentid,parenttable',
                'dividers2tabs' => TRUE,
        ),
        'feInterface' => array(
@@ -53,6 +54,7 @@ $TCA['tx_irretutorial_1nff_offer'] = array(
                'origUid' => 't3_origuid',
                // @see http://forge.typo3.org/issues/29278 which solves it implicitly in the Core
                // 'shadowColumnsForNewPlaceholders' => 'parentid,parenttable',
+               'shadowColumnsForMovePlaceholders' => 'parentid,parenttable',
                'dividers2tabs' => TRUE,
        ),
        'feInterface' => array(
@@ -84,6 +86,7 @@ $TCA['tx_irretutorial_1nff_price'] = array(
                'origUid' => 't3_origuid',
                // @see http://forge.typo3.org/issues/29278 which solves it implicitly in the Core
                // 'shadowColumnsForNewPlaceholders' => 'parentid,parenttable',
+               'shadowColumnsForMovePlaceholders' => 'parentid,parenttable',
                'dividers2tabs' => TRUE,
        ),
        'feInterface' => array(
index 9f7a282..7ad0c4e 100644 (file)
@@ -124,4 +124,8 @@ if (!defined('TYPO3_MODE')) {
        'tt_content',
        '--div--;LLL:EXT:irre_tutorial/Resources/Private/Language/locallang_db.xml:tt_content.div.irre, tx_irretutorial_1nff_hotels;;;;1-1-1, tx_irretutorial_1ncsv_hotels, tx_irretutorial_flexform'
 );
+
+$GLOBALS['TCA']['tt_content']['ctrl']['shadowColumnsForNewPlaceholders'] = 'tx_irretutorial_1ncsv_hotels';
+$GLOBALS['TCA']['tt_content']['ctrl']['shadowColumnsForMovePlaceholders'] = 'tx_irretutorial_1ncsv_hotels';
+
 ?>
\ No newline at end of file
index c0cd32c..fc5c2b2 100644 (file)
@@ -65,6 +65,11 @@ class CommandMap {
        protected $commandMap = array();
 
        /**
+        * @var int
+        */
+       protected $workspace;
+
+       /**
         * @var string
         */
        protected $workspacesSwapMode;
@@ -91,10 +96,11 @@ class CommandMap {
         * @param \TYPO3\CMS\Core\DataHandling\DataHandler $tceMain
         * @param array $commandMap
         */
-       public function __construct(\TYPO3\CMS\Version\Hook\DataHandlerHook $parent, \TYPO3\CMS\Core\DataHandling\DataHandler $tceMain, array $commandMap) {
+       public function __construct(\TYPO3\CMS\Version\Hook\DataHandlerHook $parent, \TYPO3\CMS\Core\DataHandling\DataHandler $tceMain, array $commandMap, $workspace) {
                $this->setParent($parent);
                $this->setTceMain($tceMain);
                $this->set($commandMap);
+               $this->setWorkspace($workspace);
                $this->setWorkspacesSwapMode($this->getTceMain()->BE_USER->getTSConfigVal('options.workspaces.swapMode'));
                $this->setWorkspacesChangeStageMode($this->getTceMain()->BE_USER->getTSConfigVal('options.workspaces.changeStageMode'));
                $this->setWorkspacesConsiderReferences($this->getTceMain()->BE_USER->getTSConfigVal('options.workspaces.considerReferences'));
@@ -162,6 +168,24 @@ class CommandMap {
        }
 
        /**
+        * Sets the current workspace.
+        *
+        * @param int $workspace
+        */
+       public function setWorkspace($workspace) {
+               $this->workspace = (int)$workspace;
+       }
+
+       /**
+        * Gets the current workspace.
+        *
+        * @return int
+        */
+       public function getWorkspace() {
+               return $this->workspace;
+       }
+
+       /**
         * Sets the workspaces swap mode
         * (see options.workspaces.swapMode).
         *
@@ -309,12 +333,12 @@ class CommandMap {
         */
        protected function invokeWorkspacesSetStageItems($callbackMethod, array $arguments = array()) {
                // Traverses the cmd[] array and fetches the accordant actions:
-               foreach ($this->commandMap as $table => $liveIdCollection) {
-                       foreach ($liveIdCollection as $liveIdList => $commandCollection) {
+               foreach ($this->commandMap as $table => $versionIdCollection) {
+                       foreach ($versionIdCollection as $versionIdList => $commandCollection) {
                                foreach ($commandCollection as $command => $properties) {
                                        if ($command === 'version' && isset($properties['action']) && $properties['action'] === 'setStage') {
                                                if (isset($properties['stageId']) && \TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($properties['stageId'])) {
-                                                       call_user_func_array(array($this, $callbackMethod), array_merge($arguments, array($table, $liveIdList, $properties)));
+                                                       call_user_func_array(array($this, $callbackMethod), array_merge($arguments, array($table, $versionIdList, $properties)));
                                                }
                                        }
                                }
@@ -344,29 +368,30 @@ class CommandMap {
         * Applies workspaces behaviour for staging and takes care of the changeStageMode.
         *
         * @param string $table
-        * @param string $liveIdList
+        * @param string $versionIdList
         * @param array $properties
         * @return void
         */
-       protected function applyWorkspacesSetStageBehaviour($table, $liveIdList, array $properties) {
+       protected function applyWorkspacesSetStageBehaviour($table, $versionIdList, array $properties) {
                $extendedCommandMap = array();
-               $liveIds = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode(',', $liveIdList, TRUE);
-               $elementList = array($table => $liveIds);
+               $versionIds = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode(',', $versionIdList, TRUE);
+               $elementList = array($table => $versionIds);
                if (\TYPO3\CMS\Core\Utility\GeneralUtility::inList('any,pages', $this->workspacesChangeStageMode)) {
-                       if (count($liveIds) === 1) {
-                               $workspaceRecord = BackendUtility::getRecord($table, $liveIds[0], 't3ver_wsid');
+                       if (count($versionIds) === 1) {
+                               $workspaceRecord = BackendUtility::getRecord($table, $versionIds[0], 't3ver_wsid');
                                $workspaceId = $workspaceRecord['t3ver_wsid'];
                        } else {
-                               $workspaceId = $this->getTceMain()->BE_USER->workspace;
+                               $workspaceId = $this->getWorkspace();
                        }
                        if ($table === 'pages') {
                                // Find all elements from the same ws to change stage
-                               $this->getParent()->findRealPageIds($liveIds);
-                               $this->getParent()->findPageElementsForVersionStageChange($liveIds, $workspaceId, $elementList);
+                               $livePageIds = $versionIds;
+                               $this->getParent()->findRealPageIds($livePageIds);
+                               $this->getParent()->findPageElementsForVersionStageChange($livePageIds, $workspaceId, $elementList);
                        } elseif ($this->workspacesChangeStageMode === 'any') {
                                // Find page to change stage:
                                $pageIdList = array();
-                               $this->getParent()->findPageIdsForVersionStateChange($table, $liveIds, $workspaceId, $pageIdList, $elementList);
+                               $this->getParent()->findPageIdsForVersionStateChange($table, $versionIds, $workspaceId, $pageIdList, $elementList);
                                // Find other elements from the same ws to change stage:
                                $this->getParent()->findPageElementsForVersionStageChange($pageIdList, $workspaceId, $elementList);
                        }
@@ -376,7 +401,7 @@ class CommandMap {
                                $extendedCommandMap[$elementTable][$elementId]['version'] = $properties;
                        }
                }
-               $this->remove($table, $liveIdList, 'version');
+               $this->remove($table, $versionIds, 'version');
                $this->mergeToBottom($extendedCommandMap);
        }
 
@@ -385,12 +410,12 @@ class CommandMap {
         *
         * @param \TYPO3\CMS\Version\Dependency\DependencyResolver $dependency
         * @param string $table
-        * @param string $liveIdList
+        * @param string $versionId
         * @param array $properties
         * @return void
         */
-       protected function addWorkspacesSetStageElements(\TYPO3\CMS\Version\Dependency\DependencyResolver $dependency, $table, $liveIdList, array $properties) {
-               $dependency->addElement($table, $liveIdList, array('properties' => $properties));
+       protected function addWorkspacesSetStageElements(\TYPO3\CMS\Version\Dependency\DependencyResolver $dependency, $table, $versionId, array $properties) {
+               $dependency->addElement($table, $versionId, array('versionId' => $versionId, 'properties' => $properties));
        }
 
        /**
@@ -404,11 +429,11 @@ class CommandMap {
                $scope = self::SCOPE_WorkspacesClear;
                $dependency = $this->getDependencyUtility($scope);
                // Traverses the cmd[] array and fetches the accordant actions:
-               foreach ($this->commandMap as $table => $liveIdCollection) {
-                       foreach ($liveIdCollection as $liveId => $commandCollection) {
+               foreach ($this->commandMap as $table => $versionIdCollection) {
+                       foreach ($versionIdCollection as $versionId => $commandCollection) {
                                foreach ($commandCollection as $command => $properties) {
                                        if ($command === 'version' && isset($properties['action']) && ($properties['action'] === 'clearWSID' || $properties['action'] === 'flush')) {
-                                               $dependency->addElement($table, $liveId, array('properties' => $properties));
+                                               $dependency->addElement($table, $versionId, array('versionId' => $versionId, 'properties' => $properties));
                                        }
                                }
                        }
@@ -419,23 +444,23 @@ class CommandMap {
        /**
         * Explodes id-lists in the command map for staging actions.
         *
-        * @throws RuntimeException
+        * @throws \RuntimeException
         * @param string $table
-        * @param string $liveIdList
+        * @param string $versionIdList
         * @param array $properties
         * @return void
         */
-       protected function explodeSetStage($table, $liveIdList, array $properties) {
+       protected function explodeSetStage($table, $versionIdList, array $properties) {
                $extractedCommandMap = array();
-               $liveIds = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode(',', $liveIdList, TRUE);
-               if (count($liveIds) > 1) {
-                       foreach ($liveIds as $liveId) {
-                               if (isset($this->commandMap[$table][$liveId]['version'])) {
-                                       throw new \RuntimeException('Command map for [' . $table . '][' . $liveId . '][version] was already set.', 1289391048);
+               $versionIds = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode(',', $versionIdList, TRUE);
+               if (count($versionIds) > 1) {
+                       foreach ($versionIds as $versionId) {
+                               if (isset($this->commandMap[$table][$versionId]['version'])) {
+                                       throw new \RuntimeException('Command map for [' . $table . '][' . $versionId . '][version] was already set.', 1289391048);
                                }
-                               $extractedCommandMap[$table][$liveId]['version'] = $properties;
+                               $extractedCommandMap[$table][$versionId]['version'] = $properties;
                        }
-                       $this->remove($table, $liveIdList, 'version');
+                       $this->remove($table, $versionIdList, 'version');
                        $this->mergeToBottom($extractedCommandMap);
                }
        }
@@ -516,6 +541,9 @@ class CommandMap {
                        $table = $element->getTable();
                        $id = $this->processCallback($this->getScopeData($scope, self::KEY_UpdateGetIdCallback), array($element));
                        $this->remove($table, $id, 'version');
+                       if ($element->isInvalid()) {
+                               continue;
+                       }
                        $orderedCommandMap[$table][$id]['version'] = $commonProperties;
                        if ($this->getScopeData($scope, self::KEY_GetElementPropertiesCallback)) {
                                $orderedCommandMap[$table][$id]['version'] = array_merge($commonProperties, $this->processCallback($this->getScopeData($scope, self::KEY_GetElementPropertiesCallback), array($element)));
@@ -677,6 +705,7 @@ class CommandMap {
        protected function getDependencyUtility($scope) {
                /** @var $dependency \TYPO3\CMS\Version\Dependency\DependencyResolver */
                $dependency = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Version\\Dependency\\DependencyResolver');
+               $dependency->setWorkspace($this->getWorkspace());
                $dependency->setOuterMostParentsRequireReferences(TRUE);
                if ($this->getScopeData($scope, self::KEY_ElementConstructCallback)) {
                        $dependency->setEventCallback(\TYPO3\CMS\Version\Dependency\ElementEntity::EVENT_Construct, $this->getDependencyCallback($this->getScopeData($scope, self::KEY_ElementConstructCallback)));
@@ -700,10 +729,8 @@ class CommandMap {
         * @return string Skip response (if required)
         */
        public function createNewDependentElementChildReferenceCallback(array $callerArguments, array $targetArgument, \TYPO3\CMS\Version\Dependency\ElementEntity $caller, $eventName) {
-               /** @var $reference \TYPO3\CMS\Version\Dependency\ReferenceEntity */
-               $reference = $callerArguments['reference'];
-               $fieldCOnfiguration = BackendUtility::getTcaFieldConfiguration($caller->getTable(), $reference->getField());
-               if (!$fieldCOnfiguration || !\TYPO3\CMS\Core\Utility\GeneralUtility::inList('field,list', $this->getTceMain()->getInlineFieldType($fieldCOnfiguration))) {
+               $fieldConfiguration = BackendUtility::getTcaFieldConfiguration($caller->getTable(), $callerArguments['field']);
+               if (!$fieldConfiguration || !\TYPO3\CMS\Core\Utility\GeneralUtility::inList('field,list', $this->getTceMain()->getInlineFieldType($fieldConfiguration))) {
                        return \TYPO3\CMS\Version\Dependency\ElementEntity::RESPONSE_Skip;
                }
        }
@@ -718,10 +745,8 @@ class CommandMap {
         * @return string Skip response (if required)
         */
        public function createNewDependentElementParentReferenceCallback(array $callerArguments, array $targetArgument, \TYPO3\CMS\Version\Dependency\ElementEntity $caller, $eventName) {
-               /** @var $reference \TYPO3\CMS\Version\Dependency\ReferenceEntity */
-               $reference = $callerArguments['reference'];
-               $fieldCOnfiguration = BackendUtility::getTcaFieldConfiguration($reference->getElement()->getTable(), $reference->getField());
-               if (!$fieldCOnfiguration || !\TYPO3\CMS\Core\Utility\GeneralUtility::inList('field,list', $this->getTceMain()->getInlineFieldType($fieldCOnfiguration))) {
+               $fieldConfiguration = BackendUtility::getTcaFieldConfiguration($callerArguments['table'], $callerArguments['field']);
+               if (!$fieldConfiguration || !\TYPO3\CMS\Core\Utility\GeneralUtility::inList('field,list', $this->getTceMain()->getInlineFieldType($fieldConfiguration))) {
                        return \TYPO3\CMS\Version\Dependency\ElementEntity::RESPONSE_Skip;
                }
        }
@@ -739,9 +764,7 @@ class CommandMap {
        public function createClearDependentElementChildReferenceCallback(array $callerArguments, array $targetArgument, \TYPO3\CMS\Version\Dependency\ElementEntity $caller, $eventName) {
                $response = $this->createNewDependentElementChildReferenceCallback($callerArguments, $targetArgument, $caller, $eventName);
                if (empty($response)) {
-                       /** @var $reference \TYPO3\CMS\Version\Dependency\ReferenceEntity */
-                       $reference = $callerArguments['reference'];
-                       $record = $reference->getElement()->getRecord();
+                       $record = BackendUtility::getRecord($callerArguments['table'], $callerArguments['id']);
                        if (!VersionState::cast($record['t3ver_state'])->equals(VersionState::DELETE_PLACEHOLDER)) {
                                $response = \TYPO3\CMS\Version\Dependency\ElementEntity::RESPONSE_Skip;
                        }
@@ -762,9 +785,7 @@ class CommandMap {
        public function createClearDependentElementParentReferenceCallback(array $callerArguments, array $targetArgument, \TYPO3\CMS\Version\Dependency\ElementEntity $caller, $eventName) {
                $response = $this->createNewDependentElementParentReferenceCallback($callerArguments, $targetArgument, $caller, $eventName);
                if (empty($response)) {
-                       /** @var $reference \TYPO3\CMS\Version\Dependency\ReferenceEntity */
-                       $reference = $callerArguments['reference'];
-                       $record = $reference->getElement()->getRecord();
+                       $record = BackendUtility::getRecord($callerArguments['table'], $callerArguments['id']);
                        if (!VersionState::cast($record['t3ver_state'])->equals(VersionState::DELETE_PLACEHOLDER)) {
                                $response = \TYPO3\CMS\Version\Dependency\ElementEntity::RESPONSE_Skip;
                        }
@@ -775,16 +796,54 @@ class CommandMap {
        /**
         * Callback to add additional data to new elements created in the dependency resolver utility.
         *
+        * @throws \RuntimeException
         * @param \TYPO3\CMS\Version\Dependency\ElementEntity $caller
         * @param array $callerArguments
         * @param array $targetArgument
         * @return void
         */
        public function createNewDependentElementCallback(array $callerArguments, array $targetArgument, \TYPO3\CMS\Version\Dependency\ElementEntity $caller) {
+               $versionRecord = $caller->getRecord();
+               // If version record does not exist, it probably has been deleted (cleared from workspace), this means,
+               // that the reference index still has an old reference pointer, which is "fine" for deleted parents
+               if (empty($versionRecord)) {
+                       throw new \RuntimeException(
+                               'Element "' . $caller::getIdentifier($caller->getTable(), $caller->getId()) . '" does not exist',
+                               1393960943
+                       );
+               }
+               // If version is on live workspace, but the pid is negative, mark the record as invalid.
+               // This happens if a change has been discarded (clearWSID) - it will be removed from the command map.
+               if ((int)$versionRecord['t3ver_wsid'] === 0 && (int)$versionRecord['pid'] === -1) {
+                       $caller->setDataValue('liveId', $caller->getId());
+                       $caller->setInvalid(TRUE);
+                       return;
+               }
                if ($caller->hasDataValue('liveId') === FALSE) {
-                       $liveId = BackendUtility::getLiveVersionIdOfRecord($caller->getTable(), $caller->getId());
-                       if (is_null($liveId) === FALSE) {
-                               $caller->setDataValue('liveId', $liveId);
+                       // Set the original uid from the version record
+                       if (!empty($versionRecord['t3ver_oid']) && (int)$versionRecord['pid'] === -1 && (int)$versionRecord['t3ver_wsid'] === $this->getWorkspace()) {
+                               $caller->setDataValue('liveId', $versionRecord['t3ver_oid']);
+                       // The current version record is actually a live record or an accordant placeholder for live
+                       } elseif ((int)$versionRecord['t3ver_wsid'] === 0 || (int)$versionRecord['pid'] !== -1) {
+                               $caller->setDataValue('liveId', $caller->getId());
+                               $versionRecord = BackendUtility::getWorkspaceVersionOfRecord(
+                                       $this->getWorkspace(),
+                                       $caller->getTable(),
+                                       $caller->getId(),
+                                       'uid,t3ver_state'
+                               );
+                               // Set version uid to caller, most likely it's a delete placeholder
+                               // for a child record that is not recognized in the reference index
+                               if (!empty($versionRecord['uid'])) {
+                                       $caller->setId($versionRecord['uid']);
+                               // If no version could be determined, mark record as invalid
+                               // (thus, it will be removed from the command map)
+                               } else {
+                                       $caller->setInvalid(TRUE);
+                               }
+                       // In case of an unexpected record state, mark the record as invalid
+                       } else {
+                               $caller->setInvalid(TRUE);
                        }
                }
        }
index 15b9ef4..8a25569 100644 (file)
@@ -51,9 +51,11 @@ class DependencyEntityFactory {
         * @return \TYPO3\CMS\Version\Dependency\ElementEntity
         */
        public function getElement($table, $id, array $data = array(), \TYPO3\CMS\Version\Dependency\DependencyResolver $dependency) {
-               $elementName = $table . ':' . $id;
+               /** @var $element ElementEntity */
+               $element = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Version\\Dependency\\ElementEntity', $table, $id, $data, $dependency);
+               $elementName = $element->__toString();
                if (!isset($this->elements[$elementName])) {
-                       $this->elements[$elementName] = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Version\\Dependency\\ElementEntity', $table, $id, $data, $dependency);
+                       $this->elements[$elementName] = $element;
                }
                return $this->elements[$elementName];
        }
index 30cee1a..8680a76 100644 (file)
@@ -32,6 +32,11 @@ namespace TYPO3\CMS\Version\Dependency;
 class DependencyResolver {
 
        /**
+        * @var int
+        */
+       protected $workspace = 0;
+
+       /**
         * @var \TYPO3\CMS\Version\Dependency\DependencyEntityFactory
         */
        protected $factory;
@@ -57,6 +62,24 @@ class DependencyResolver {
        protected $outerMostParents;
 
        /**
+        * Sets the current workspace.
+        *
+        * @param int $workspace
+        */
+       public function setWorkspace($workspace) {
+               $this->workspace = (int) $workspace;
+       }
+
+       /**
+        * Gets the current workspace.
+        *
+        * @return int
+        */
+       public function getWorkspace() {
+               return $this->workspace;
+       }
+
+       /**
         * Sets a callback for a particular event.
         *
         * @param string $eventName
@@ -154,7 +177,7 @@ class DependencyResolver {
        public function getNestedElements(\TYPO3\CMS\Version\Dependency\ElementEntity $outerMostParent) {
                $outerMostParentName = $outerMostParent->__toString();
                if (!isset($this->outerMostParents[$outerMostParentName])) {
-                       throw new \RuntimeException('Element "' . $outerMostParentName . '" was detected as outermost parent.', 1289318609);
+                       throw new \RuntimeException('Element "' . $outerMostParentName . '" was not detected as outermost parent.', 1289318609);
                }
                $nestedStructure = array_merge(array($outerMostParentName => $outerMostParent), $outerMostParent->getNestedChildren());
                return $nestedStructure;
index 501802a..4f7b862 100644 (file)
@@ -37,6 +37,12 @@ class ElementEntity {
        const EVENT_CreateChildReference = 'TYPO3\\CMS\\Version\\Dependency\\ElementEntity::createChildReference';
        const EVENT_CreateParentReference = 'TYPO3\\CMS\\Version\\Dependency\\ElementEntity::createParentReference';
        const RESPONSE_Skip = 'TYPO3\\CMS\\Version\\Dependency\\ElementEntity->skip';
+
+       /**
+        * @var bool
+        */
+       protected $invalid = FALSE;
+
        /**
         * @var string
         */
@@ -104,6 +110,20 @@ class ElementEntity {
        }
 
        /**
+        * @param bool $invalid
+        */
+       public function setInvalid($invalid) {
+               $this->invalid = (bool)$invalid;
+       }
+
+       /**
+        * @return bool
+        */
+       public function isInvalid() {
+               return $this->invalid;
+       }
+
+       /**
         * Gets the table.
         *
         * @return string
@@ -122,6 +142,15 @@ class ElementEntity {
        }
 
        /**
+        * Sets the id.
+        *
+        * @param int $id
+        */
+       public function setId($id) {
+               $this->id = (int)$id;
+       }
+
+       /**
         * Gets the data.
         *
         * @return array
@@ -191,13 +220,19 @@ class ElementEntity {
        public function getChildren() {
                if (!isset($this->children)) {
                        $this->children = array();
-                       $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('*', 'sys_refindex', 'tablename=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($this->table, 'sys_refindex') . ' AND recuid=' . $this->id);
+                       $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('*', 'sys_refindex', 'tablename=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($this->table, 'sys_refindex') . ' AND recuid=' . $this->id . ' AND workspace=' . $this->dependency->getWorkspace(), '', 'sorting');
                        if (is_array($rows)) {
                                foreach ($rows as $row) {
-                                       $reference = $this->getDependency()->getFactory()->getReferencedElement($row['ref_table'], $row['ref_uid'], $row['field'], array(), $this->getDependency());
-                                       $callbackResponse = $this->dependency->executeEventCallback(self::EVENT_CreateChildReference, $this, array('reference' => $reference));
+                                       $arguments = array('table' => $row['ref_table'], 'id' => $row['ref_uid'], 'field' => $row['field'], 'scope' => self::REFERENCES_ChildOf);
+                                       $callbackResponse = $this->dependency->executeEventCallback(self::EVENT_CreateChildReference, $this, $arguments);
                                        if ($callbackResponse !== self::RESPONSE_Skip) {
-                                               $this->children[] = $reference;
+                                               $this->children[] = $this->getDependency()->getFactory()->getReferencedElement(
+                                                       $row['ref_table'],
+                                                       $row['ref_uid'],
+                                                       $row['field'],
+                                                       array(),
+                                                       $this->getDependency()
+                                               );
                                        }
                                }
                        }
@@ -213,13 +248,19 @@ class ElementEntity {
        public function getParents() {
                if (!isset($this->parents)) {
                        $this->parents = array();
-                       $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('*', 'sys_refindex', 'ref_table=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($this->table, 'sys_refindex') . ' AND deleted=0 AND ref_uid=' . $this->id);
+                       $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('*', 'sys_refindex', 'ref_table=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($this->table, 'sys_refindex') . ' AND deleted=0 AND ref_uid=' . $this->id . ' AND workspace=' . $this->dependency->getWorkspace(), '', 'sorting');
                        if (is_array($rows)) {
                                foreach ($rows as $row) {
-                                       $reference = $this->getDependency()->getFactory()->getReferencedElement($row['tablename'], $row['recuid'], $row['field'], array(), $this->getDependency());
-                                       $callbackResponse = $this->dependency->executeEventCallback(self::EVENT_CreateParentReference, $this, array('reference' => $reference));
+                                       $arguments = array('table' => $row['tablename'], 'id' => $row['recuid'], 'field' => $row['field'], 'scope' => self::REFERENCES_ParentOf);
+                                       $callbackResponse = $this->dependency->executeEventCallback(self::EVENT_CreateParentReference, $this, $arguments);
                                        if ($callbackResponse !== self::RESPONSE_Skip) {
-                                               $this->parents[] = $reference;
+                                               $this->parents[] = $this->getDependency()->getFactory()->getReferencedElement(
+                                                       $row['tablename'],
+                                                       $row['recuid'],
+                                                       $row['field'],
+                                                       array(),
+                                                       $this->getDependency()
+                                               );
                                        }
                                }
                        }
@@ -297,9 +338,9 @@ class ElementEntity {
         * @return array
         */
        public function getRecord() {
-               if (!isset($this->record)) {
+               if (empty($this->record['uid']) || (int)$this->record['uid'] !== $this->id) {
                        $this->record = array();
-                       $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('*', $this->getTable(), 'uid=' . $this->getId());
+                       $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('uid,pid,t3ver_wsid,t3ver_state,t3ver_oid', $this->getTable(), 'uid=' . $this->getId());
                        if (is_array($rows)) {
                                $this->record = $rows[0];
                        }
index 011e3b6..0409c36 100644 (file)
@@ -76,7 +76,7 @@ class DataHandlerHook {
                // Reset notification array
                $this->notificationEmailInfo = array();
                // Resolve dependencies of version/workspaces actions:
-               $tcemainObj->cmdmap = $this->getCommandMap($tcemainObj, $tcemainObj->cmdmap)->process()->get();
+               $tcemainObj->cmdmap = $this->getCommandMap($tcemainObj)->process()->get();
        }
 
        /**
@@ -268,17 +268,25 @@ class DataHandlerHook {
         * moving records that are *not* in the live workspace
         *
         * @param string $table the table of the record
-        * @param integer $id the ID of the record
+        * @param integer $uid the ID of the record
         * @param integer $destPid Position to move to: $destPid: >=0 then it points to
         * @param array $propArr Record properties, like header and pid (includes workspace overlay)
         * @param array $moveRec Record properties, like header and pid (without workspace overlay)
         * @param integer $resolvedPid The final page ID of the record
         * @param boolean $recordWasMoved can be set so that other hooks or
-        * @param       $table  the table
+        * @param DataHandler $tcemainObj
+        * @return void
         */
        public function moveRecord($table, $uid, $destPid, array $propArr, array $moveRec, $resolvedPid, &$recordWasMoved, DataHandler $tcemainObj) {
                // Only do something in Draft workspace
                if ($tcemainObj->BE_USER->workspace !== 0) {
+                       if ($destPid < 0) {
+                               // Fetch move placeholder, since it might point to a new page in the current workspace
+                               $movePlaceHolder = BackendUtility::getMovePlaceholder($table, abs($destPid), 'uid,pid');
+                               if ($movePlaceHolder !== FALSE) {
+                                       $resolvedPid = $movePlaceHolder['pid'];
+                               }
+                       }
                        $recordWasMoved = TRUE;
                        $moveRecVersionState = VersionState::cast($moveRec['t3ver_state']);
                        // Get workspace version of the source record, if any:
@@ -286,18 +294,19 @@ class DataHandlerHook {
                        // If no version exists and versioningWS is in version 2, a new placeholder is made automatically:
                        if (
                                !$WSversion['uid']
-                               && (int)$GLOBALS['TCA'][$table]['ctrl']['versioningWS'] >= 2
+                               && BackendUtility::isTableMovePlaceholderAware($table)
                                && !$moveRecVersionState->equals(VersionState::MOVE_PLACEHOLDER)
                        ) {
                                $tcemainObj->versionizeRecord($table, $uid, 'Placeholder version for moving record');
                                $WSversion = BackendUtility::getWorkspaceVersionOfRecord($tcemainObj->BE_USER->workspace, $table, $uid, 'uid,t3ver_oid');
+                               $this->moveRecord_processFields($tcemainObj, $resolvedPid, $table, $uid);
                        }
                        // Check workspace permissions:
                        $workspaceAccessBlocked = array();
                        // Element was in "New/Deleted/Moved" so it can be moved...
                        $recIsNewVersion = $moveRecVersionState->indicatesPlaceholder();
                        $destRes = $tcemainObj->BE_USER->workspaceAllowLiveRecordsInPID($resolvedPid, $table);
-                       $canMoveRecord = $recIsNewVersion || (int)$GLOBALS['TCA'][$table]['ctrl']['versioningWS'] >= 2;
+                       $canMoveRecord = ($recIsNewVersion || BackendUtility::isTableMovePlaceholderAware($table));
                        // Workspace source check:
                        if (!$recIsNewVersion) {
                                $errorCode = $tcemainObj->BE_USER->workspaceCannotEditRecord($table, $WSversion['uid'] ? $WSversion['uid'] : $uid);
@@ -320,7 +329,7 @@ class DataHandlerHook {
                        if (!count($workspaceAccessBlocked)) {
                                // If the move operation is done on a versioned record, which is
                                // NOT new/deleted placeholder and versioningWS is in version 2, then...
-                               if ($WSversion['uid'] && !$recIsNewVersion && (int)$GLOBALS['TCA'][$table]['ctrl']['versioningWS'] >= 2) {
+                               if ($WSversion['uid'] && !$recIsNewVersion && BackendUtility::isTableMovePlaceholderAware($table)) {
                                        $this->moveRecord_wsPlaceholders($table, $uid, $destPid, $WSversion['uid'], $tcemainObj);
                                } else {
                                        // moving not needed, just behave like in live workspace
@@ -332,6 +341,74 @@ class DataHandlerHook {
                }
        }
 
+       /**
+        * Processes fields of a moved record and follows references.
+        *
+        * @param DataHandler $dataHandler Calling DataHandler instance
+        * @param int $resolvedPageId Resolved real destination page id
+        * @param string $table Name of parent table
+        * @param int $uid UID of the parent record
+        * @return void
+        */
+       protected function moveRecord_processFields(DataHandler $dataHandler, $resolvedPageId, $table, $uid) {
+               $versionedRecord = BackendUtility::getWorkspaceVersionOfRecord($dataHandler->BE_USER->workspace, $table, $uid);
+               if (empty($versionedRecord)) {
+                       return;
+               }
+               foreach ($versionedRecord as $field => $value) {
+                       if (empty($GLOBALS['TCA'][$table]['columns'][$field]['config'])) {
+                               continue;
+                       }
+                       $this->moveRecord_processFieldValue(
+                               $dataHandler, $resolvedPageId,
+                               $table, $uid, $field, $value,
+                               $GLOBALS['TCA'][$table]['columns'][$field]['config']
+                       );
+               }
+       }
+
+       /**
+        * Processes a single field of a moved record and follows references.
+        *
+        * @param DataHandler $dataHandler Calling DataHandler instance
+        * @param int $resolvedPageId Resolved real destination page id
+        * @param string $table Name of parent table
+        * @param int $uid UID of the parent record
+        * @param string $field Name of the field of the parent record
+        * @param string $value Value of the field of the parent record
+        * @param array $configuration TCA field configuration of the parent record
+        * @return void
+        */
+       protected function moveRecord_processFieldValue(DataHandler $dataHandler, $resolvedPageId, $table, $uid, $field, $value, array $configuration) {
+               $inlineFieldType = $dataHandler->getInlineFieldType($configuration);
+               $inlineProcessing = (
+                       ($inlineFieldType === 'list' || $inlineFieldType === 'field')
+                       && BackendUtility::isTableMovePlaceholderAware($configuration['foreign_table'])
+                       && (!isset($configuration['behaviour']['disableMovingChildrenWithParent']) || !$configuration['behaviour']['disableMovingChildrenWithParent'])
+               );
+
+               if ($inlineProcessing) {
+                       if ($table === 'pages') {
+                               // If the inline elements are related to a page record,
+                               // make sure they reside at that page and not at its parent
+                               $destinationPageId = $uid;
+                       }
+
+                       $dbAnalysis = $this->createRelationHandlerInstance();
+                       $dbAnalysis->start($value, $configuration['foreign_table'], '', $uid, $table, $configuration);
+
+                       // Moving records to a positive destination will insert each
+                       // record at the beginning, thus the order is reversed here:
+                       foreach ($dbAnalysis->itemArray as $item) {
+                               $versionedRecord = BackendUtility::getWorkspaceVersionOfRecord($dataHandler->BE_USER->workspace, $item['table'], $item['id'], 'uid,t3ver_state');
+                               if (empty($versionedRecord) || VersionState::cast($versionedRecord['t3ver_state'])->indicatesPlaceholder()) {
+                                       continue;
+                               }
+                               $this->moveRecord_wsPlaceholders($item['table'], $item['id'], $resolvedPageId, $versionedRecord['uid'], $dataHandler);
+                       }
+               }
+       }
+
        /****************************
         *****  Notifications  ******
         ****************************/
@@ -783,12 +860,6 @@ class DataHandlerHook {
                                                                                                }
                                                                                        }
                                                                                }
-                                                                               // Take care of relations in each field (e.g. IRRE):
-                                                                               if (is_array($GLOBALS['TCA'][$table]['columns'])) {
-                                                                                       foreach ($GLOBALS['TCA'][$table]['columns'] as $field => $fieldConf) {
-                                                                                               $this->version_swap_procBasedOnFieldType($table, $field, $fieldConf['config'], $curVersion, $swapVersion, $tcemainObj);
-                                                                                       }
-                                                                               }
                                                                                unset($swapVersion['uid']);
                                                                                // Modify online version to become offline:
                                                                                unset($curVersion['uid']);
@@ -917,51 +988,6 @@ class DataHandlerHook {
        }
 
        /**
-        * Update relations on version/workspace swapping.
-        *
-        * @param string $table: Record Table
-        * @param string $field: Record field
-        * @param array $conf: TCA configuration of current field
-        * @param array $curVersion: Reference to the current (original) record
-        * @param array $swapVersion: Reference to the record (workspace/versionized) to publish in or swap with
-        * @param DataHandler $tcemainObj TCEmain object
-        * @return void
-        */
-       protected function version_swap_procBasedOnFieldType($table, $field, array $conf, array &$curVersion, array &$swapVersion, DataHandler $tcemainObj) {
-               $inlineType = $tcemainObj->getInlineFieldType($conf);
-               // Process pointer fields on normalized database:
-               if ($inlineType == 'field') {
-                       // Read relations that point to the current record (e.g. live record):
-                       /** @var $dbAnalysisCur \TYPO3\CMS\Core\Database\RelationHandler */
-                       $dbAnalysisCur = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Database\\RelationHandler');
-                       $dbAnalysisCur->setUpdateReferenceIndex(FALSE);
-                       $dbAnalysisCur->start('', $conf['foreign_table'], '', $curVersion['uid'], $table, $conf);
-                       // Read relations that point to the record to be swapped with e.g. draft record):
-                       /** @var $dbAnalysisSwap \TYPO3\CMS\Core\Database\RelationHandler */
-                       $dbAnalysisSwap = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Database\\RelationHandler');
-                       $dbAnalysisSwap->setUpdateReferenceIndex(FALSE);
-                       $dbAnalysisSwap->start('', $conf['foreign_table'], '', $swapVersion['uid'], $table, $conf);
-                       // Update relations for both (workspace/versioning) sites:
-                       if (count($dbAnalysisCur->itemArray)) {
-                               $dbAnalysisCur->writeForeignField($conf, $curVersion['uid'], $swapVersion['uid']);
-                               $tcemainObj->addRemapAction($table, $curVersion['uid'], array($this, 'writeRemappedForeignField'), array($dbAnalysisCur, $conf, $swapVersion['uid']));
-                       }
-                       if (count($dbAnalysisSwap->itemArray)) {
-                               $dbAnalysisSwap->writeForeignField($conf, $swapVersion['uid'], $curVersion['uid']);
-                               $tcemainObj->addRemapAction($table, $curVersion['uid'], array($this, 'writeRemappedForeignField'), array($dbAnalysisSwap, $conf, $curVersion['uid']));
-                       }
-                       $items = array_merge($dbAnalysisCur->itemArray, $dbAnalysisSwap->itemArray);
-                       foreach ($items as $item) {
-                               $tcemainObj->addRemapStackRefIndex($item['table'], $item['id']);
-                       }
-               } elseif ($inlineType == 'list') {
-                       $tempValue = $curVersion[$field];
-                       $curVersion[$field] = $swapVersion[$field];
-                       $swapVersion[$field] = $tempValue;
-               }
-       }
-
-       /**
         * Writes remapped foreign field (IRRE).
         *
         * @param \TYPO3\CMS\Core\Database\RelationHandler $dbAnalysis Instance that holds the sorting order of child records
@@ -1306,11 +1332,16 @@ class DataHandlerHook {
         * Gets an instance of the command map helper.
         *
         * @param DataHandler $tceMain TCEmain object
-        * @param array $commandMap The command map as submitted to \TYPO3\CMS\Core\DataHandling\DataHandler
         * @return \TYPO3\CMS\Version\DataHandler\CommandMap
         */
-       public function getCommandMap(DataHandler $tceMain, array $commandMap) {
-               return GeneralUtility::makeInstance('TYPO3\\CMS\\Version\\DataHandler\\CommandMap', $this, $tceMain, $commandMap);
+       public function getCommandMap(DataHandler $tceMain) {
+               return GeneralUtility::makeInstance(
+                       'TYPO3\\CMS\\Version\\DataHandler\\CommandMap',
+                       $this,
+                       $tceMain,
+                       $tceMain->cmdmap,
+                       $tceMain->BE_USER->workspace
+               );
        }
 
        /**
@@ -1334,4 +1365,11 @@ class DataHandlerHook {
                return $listArr;
        }
 
+       /**
+        * @return \TYPO3\CMS\Core\Database\RelationHandler
+        */
+       protected function createRelationHandlerInstance() {
+               return GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Database\\RelationHandler');
+       }
+
 }
index 5c6ce6f..0f45f94 100644 (file)
@@ -355,11 +355,13 @@ class ActionHandler extends \TYPO3\CMS\Workspaces\ExtDirect\AbstractHandler {
                $recipients = $this->getRecipientList($parameters->receipients, $parameters->additional, $stageId);
                foreach ($parameters->affects as $tableName => $items) {
                        foreach ($items as $item) {
+                               // Publishing uses live id in command map
                                if ($stageId == \TYPO3\CMS\Workspaces\Service\StagesService::STAGE_PUBLISH_EXECUTE_ID) {
                                        $cmdMapArray[$tableName][$item->t3ver_oid]['version']['action'] = 'swap';
                                        $cmdMapArray[$tableName][$item->t3ver_oid]['version']['swapWith'] = $item->uid;
                                        $cmdMapArray[$tableName][$item->t3ver_oid]['version']['comment'] = $comment;
                                        $cmdMapArray[$tableName][$item->t3ver_oid]['version']['notificationAlternativeRecipients'] = $recipients;
+                               // Setting stage uses version id in command map
                                } else {
                                        $cmdMapArray[$tableName][$item->uid]['version']['action'] = 'setStage';
                                        $cmdMapArray[$tableName][$item->uid]['version']['stageId'] = $stageId;
index dbef766..d4c57f4 100644 (file)
@@ -66,6 +66,8 @@ abstract class AbstractOneToNTestCase extends AbstractTestCase {
         * @test
         */
        public function isChildPublishedSeparatelyIfParentIsVersionized() {
+               $this->markTestSkipped('Will be replaced by ActionTests...');
+
                $this->setExpectedLogEntries(1);
 
                $this->versionizeAllChildrenWithParent();
@@ -94,6 +96,8 @@ abstract class AbstractOneToNTestCase extends AbstractTestCase {
         * @test
         */
        public function isChildSwappedSeparatelyIfParentIsVersionized() {
+               $this->markTestSkipped('Will be replaced by ActionTests...');
+
                $this->setExpectedLogEntries(2);
 
                $this->versionizeAllChildrenWithParent();
@@ -136,6 +140,8 @@ abstract class AbstractOneToNTestCase extends AbstractTestCase {
         * @test
         */
        public function areAllChildrenSwappedAutomaticallyIfParentIsSwapped() {
+               $this->markTestSkipped('Will be replaced by ActionTests...');
+
                $this->setWorkspacesConsiderReferences(TRUE);
 
                $this->versionizeAllChildrenWithParent();
@@ -172,6 +178,8 @@ abstract class AbstractOneToNTestCase extends AbstractTestCase {
         * @test
         */
        public function areAllChildrenDoubleSwappedAutomaticallyIfParentIsSwapped() {
+               $this->markTestSkipped('Will be replaced by ActionTests...');
+
                $this->setWorkspacesConsiderReferences(TRUE);
 
                $this->versionizeAllChildrenWithParent();
@@ -228,6 +236,8 @@ abstract class AbstractOneToNTestCase extends AbstractTestCase {
         * @test
         */
        public function areChildRecordsConsideredToBeRemovedOnEditingParent() {
+               $this->markTestSkipped('Will be replaced by ActionTests...');
+
                $this->simulateByStructure(
                        $this->getElementStructureForEditing(array(
                                static::TABLE_Hotel => '1',
@@ -250,6 +260,8 @@ abstract class AbstractOneToNTestCase extends AbstractTestCase {
         * @test
         */
        public function areChildRecordsConsideredToBeRemovedOnEditingParentAndChildren() {
+               $this->markTestSkipped('Will be replaced by ActionTests...');
+
                $this->simulateByStructure(
                        $this->getElementStructureForEditing(array(
                                static::TABLE_Hotel => '1',
@@ -293,6 +305,8 @@ abstract class AbstractOneToNTestCase extends AbstractTestCase {
         * @test
         */
        public function areNestedChildRecordsConsideredToBeRemovedOnDirectRemoval() {
+               $this->markTestSkipped('Will be replaced by ActionTests...');
+
                $this->simulateCommand(static::COMMAND_Delete, 1, array(static::TABLE_Offer => 1));
 
                $this->assertHasDeletePlaceholder(array(
@@ -309,6 +323,8 @@ abstract class AbstractOneToNTestCase extends AbstractTestCase {
         * @test
         */
        public function areChildRecordsRevertedOnRevertingTheRelativeRemovedParent() {
+               $this->markTestSkipped('Will be replaced by ActionTests...');
+
                $this->setWorkspacesConsiderReferences(TRUE);
 
                $this->simulateByStructure(
@@ -351,6 +367,8 @@ abstract class AbstractOneToNTestCase extends AbstractTestCase {
         * @test
         */
        public function areChildRecordsRevertedOnRevertingMultipleElements() {
+               $this->markTestSkipped('Will be replaced by ActionTests...');
+
                $this->setWorkspacesConsiderReferences(TRUE);
 
                $this->simulateByStructure(
@@ -402,6 +420,8 @@ abstract class AbstractOneToNTestCase extends AbstractTestCase {
         * @test
         */
        public function areParentAndChildRecordsRemovedOnPublishingDeleteAction() {
+               $this->markTestSkipped('Will be replaced by ActionTests...');
+
                $this->setWorkspacesConsiderReferences(TRUE);
 
                $this->simulateByStructure(
index dc13e01..8b91f2f 100644 (file)
@@ -365,7 +365,7 @@ abstract class AbstractTestCase extends \TYPO3\CMS\Core\Tests\Functional\DataHan
        }
 
        public function getVersionTceMainCommandMapCallback(DataHandler $tceMain, array $commandMap) {
-               $this->versionTceMainCommandMap = GeneralUtility::makeInstance('TYPO3\\CMS\\Version\\DataHandler\\CommandMap', $this->versionTceMainHookMock, $tceMain, $commandMap);
+               $this->versionTceMainCommandMap = GeneralUtility::makeInstance('TYPO3\\CMS\\Version\\DataHandler\\CommandMap', $this->versionTceMainHookMock, $tceMain, $commandMap, self::VALUE_WorkspaceId);
                return $this->versionTceMainCommandMap;
        }
 
index dfcfd56..b496523 100644 (file)
@@ -167,6 +167,25 @@ abstract class AbstractActionTestCase extends \TYPO3\CMS\Core\Tests\Functional\D
        public function copyPage() {
                $newTableIds = $this->actionService->copyRecord(self::TABLE_Page, self::VALUE_PageId, self::VALUE_PageIdTarget);
                $this->recordIds['newPageId'] = $newTableIds[self::TABLE_Page][self::VALUE_PageId];
+               $this->recordIds['newContentIdFirst'] = $newTableIds[self::TABLE_Content][self::VALUE_ContentIdFirst];
+               $this->recordIds['newContentIdLast'] = $newTableIds[self::TABLE_Content][self::VALUE_ContentIdLast];
+       }
+
+       /**
+        * @test
+        * @see DataSet/Assertion/copyPageWHotelBeforeParentContent.csv
+        */
+       public function copyPageWithHotelBeforeParentContent() {
+               // Ensure hotels get processed first
+               $GLOBALS['TCA'] = array_merge(
+                       array(self::TABLE_Hotel => $GLOBALS['TCA'][self::TABLE_Hotel]),
+                       $GLOBALS['TCA']
+               );
+
+               $newTableIds = $this->actionService->copyRecord(self::TABLE_Page, self::VALUE_PageId, self::VALUE_PageIdTarget);
+               $this->recordIds['newPageId'] = $newTableIds[self::TABLE_Page][self::VALUE_PageId];
+               $this->recordIds['newContentIdFirst'] = $newTableIds[self::TABLE_Content][self::VALUE_ContentIdFirst];
+               $this->recordIds['newContentIdLast'] = $newTableIds[self::TABLE_Content][self::VALUE_ContentIdLast];
        }
 
        /**
@@ -245,6 +264,26 @@ abstract class AbstractActionTestCase extends \TYPO3\CMS\Core\Tests\Functional\D
                $this->recordIds['newHotelId'] = $newTableIds[self::TABLE_Hotel][0];
                $localizedTableIds = $this->actionService->localizeRecord(self::TABLE_Content, $this->recordIds['newContentId'], self::VALUE_LanguageId);
                $this->recordIds['localizedContentId'] = $localizedTableIds[self::TABLE_Content][$this->recordIds['newContentId']];
+               $this->recordIds['localizedHotelId'] = $localizedTableIds[self::TABLE_Hotel][$this->recordIds['newHotelId']];
+       }
+
+       /**
+        * @see DataSet/Assertion/createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent.csv
+        */
+       public function createAndLocalizeParentContentWithHotelAndOfferChildrenAndDiscardCreatedParent() {
+               $newTableIds = $this->actionService->createNewRecords(
+                       self::VALUE_PageId,
+                       array(
+                               self::TABLE_Content => array('header' => 'Testing #1', self::FIELD_ContentHotel => '__nextUid'),
+                               self::TABLE_Hotel => array('title' => 'Hotel #1', self::FIELD_HotelOffer => '__nextUid'),
+                               self::TABLE_Offer => array('title' => 'Offer #1'),
+                       )
+               );
+               $this->recordIds['newContentId'] = $newTableIds[self::TABLE_Content][0];
+               $this->recordIds['versionedNewContentId'] = $this->actionService->getDataHander()->getAutoVersionId(self::TABLE_Content, $this->recordIds['newContentId']);
+               $localizedTableIds = $this->actionService->localizeRecord(self::TABLE_Content, $this->recordIds['newContentId'], self::VALUE_LanguageId);
+               $this->recordIds['localizedContentId'] = $localizedTableIds[self::TABLE_Content][$this->recordIds['newContentId']];
+               $this->actionService->clearWorkspaceRecord(self::TABLE_Content, $this->recordIds['versionedNewContentId']);
        }
 
        /**
@@ -355,4 +394,33 @@ abstract class AbstractActionTestCase extends \TYPO3\CMS\Core\Tests\Functional\D
                );
        }
 
+       /**
+        * @see DataSet/modifyNDiscardNModifyParentWHotelChild.csv
+        */
+       public function modifyAndDiscardAndModifyParentWithHotelChild() {
+               $this->actionService->modifyRecords(
+                       self::VALUE_PageId,
+                       array(
+                               self::TABLE_Content => array('uid' => self::VALUE_ContentIdFirst, 'header' => 'Testing #1', self::FIELD_ContentHotel => '3,4'),
+                               self::TABLE_Hotel => array('uid' => 4, 'title' => 'Testing #1'),
+                       )
+               );
+               $this->recordIds['versionedContentId'] = $this->actionService->getDataHander()->getAutoVersionId(self::TABLE_Content, self::VALUE_ContentIdFirst);
+               $this->recordIds['versionedHotelIdFirst'] = $this->actionService->getDataHander()->getAutoVersionId(self::TABLE_Hotel, 3);
+               $this->recordIds['versionedHotelIdSecond'] = $this->actionService->getDataHander()->getAutoVersionId(self::TABLE_Hotel, 4);
+               $this->actionService->clearWorkspaceRecords(
+                       array(
+                               self::TABLE_Content => array($this->recordIds['versionedContentId']),
+                               self::TABLE_Hotel => array($this->recordIds['versionedHotelIdSecond']),
+                       )
+               );
+               $this->actionService->modifyRecords(
+                       self::VALUE_PageId,
+                       array(
+                               self::TABLE_Content => array('uid' => self::VALUE_ContentIdFirst, 'header' => 'Testing #2', self::FIELD_ContentHotel => '3,4'),
+                               self::TABLE_Hotel => array('uid' => 4, 'title' => 'Testing #2'),
+                       )
+               );
+       }
+
 }
index 77047a8..b40f5d6 100644 (file)
@@ -62,18 +62,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1');
-
-               // @todo Cannot direct select workspace version due to frontend SQL query
-               // SELECT * FROM tx_irretutorial_1ncsv_hotel
-               // WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
-               // AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
-               // AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1')
+               );
        }
 
        /**
@@ -139,22 +131,14 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
                $this->assertAssertionDataSet('changeParentContentSorting');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
-
-               // @todo Cannot direct select workspace version due to frontend SQL query
-               // SELECT * FROM tx_irretutorial_1ncsv_hotel
-               // WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
-               // AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
-               // AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
-                       );
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+               );
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1')
+               );
        }
 
        /**
@@ -167,14 +151,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageIdTarget, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Regular Element #2');
-
-               // @todo Workspace child records gets lost due to core bug
-               /*
                $this->assertResponseContentStructureHasRecords(
                        $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
                        self::TABLE_Hotel, 'title', array('Hotel #1')
                );
-               */
        }
 
        /**
@@ -187,22 +167,14 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageIdTarget, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', array('Regular Element #2', 'Regular Element #1'));
-
-               // @todo Cannot direct select workspace version due to frontend SQL query
-               // SELECT * FROM tx_irretutorial_1ncsv_hotel
-               // WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
-               // AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
-               // AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
-                       );
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+               );
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1')
+               );
        }
 
        /**
@@ -250,6 +222,18 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
        }
 
        /**
+        * @test
+        * @see DataSet/Assertion/copyPageWHotelBeforeParentContent.csv
+        */
+       public function copyPageWithHotelBeforeParentContent() {
+               parent::copyPageWithHotelBeforeParentContent();
+               $this->assertAssertionDataSet('copyPageWHotelBeforeParentContent');
+
+               $responseContent = $this->getFrontendResponse($this->recordIds['newPageId'], 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+               $this->assertResponseContentHasRecords($responseContent, self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2', 'Hotel #1'));
+       }
+
+       /**
         * IRRE Child Records
         */
 
@@ -263,14 +247,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1');
-
-               // @todo Shadow fields are not correct on the new placeholder
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . $this->recordIds['newContentId'], self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', 'Hotel #1'
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . $this->recordIds['newContentId'], self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', 'Hotel #1'
+               );
        }
 
        /**
@@ -279,27 +259,22 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         */
        public function createAndCopyParentContentWithHotelAndOfferChildren() {
                parent::createAndCopyParentContentWithHotelAndOfferChildren();
-               // @todo Copying the new child records is broken in the Core
                $this->assertAssertionDataSet('createNCopyParentContentNHotelNOfferChildren');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1 (copy 1)');
-
-               // @todo Shadow fields are not correct on the new placeholder
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . $this->recordIds['newContentId'], self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', 'Hotel #1'
-                       );
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . $this->recordIds['copiedContentId'], self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', 'Hotel #1'
-                       );
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Hotel . ':' . $this->recordIds['copiedHotelId'], self::FIELD_HotelOffer,
-                               self::TABLE_Offer, 'title', 'Offer #1'
-                       );
-                */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . $this->recordIds['newContentId'], self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', 'Hotel #1'
+               );
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . $this->recordIds['copiedContentId'], self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', 'Hotel #1'
+               );
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Hotel . ':' . $this->recordIds['copiedHotelId'], self::FIELD_HotelOffer,
+                       self::TABLE_Offer, 'title', 'Offer #1'
+               );
        }
 
        /**
@@ -308,7 +283,6 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         */
        public function createAndCopyParentContentWithHotelAndOfferChildrenAndDiscardCopiedParent() {
                parent::createAndCopyParentContentWithHotelAndOfferChildrenAndDiscardCopiedParent();
-               // @todo Copying the new child records is broken in the Core
                $this->assertAssertionDataSet('createNCopyParentContentNHotelNOfferChildrenNDiscardCopiedParent');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
@@ -321,23 +295,30 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         */
        public function createAndLocalizeParentContentWithHotelAndOfferChildren() {
                parent::createAndLocalizeParentContentWithHotelAndOfferChildren();
-               // @todo Localizing the new child records is broken in the Core
                $this->assertAssertionDataSet('createNLocalizeParentContentNHotelNOfferChildren');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, self::VALUE_LanguageId, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', '[Translate to Dansk:] Testing #1');
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . $this->recordIds['newContentId'], self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', '[Translate to Dansk:] Hotel #1'
+               );
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Hotel . ':' . $this->recordIds['localizedHotelId'], self::FIELD_HotelOffer,
+                       self::TABLE_Offer, 'title', '[Translate to Dansk:] Offer #1'
+               );
+       }
 
-               // @todo Does not work since children don't point to live-default record
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . $this->recordIds['localizedContentId'], self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', '[Translate to Dansk:] Hotel #1'
-                       );
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Hotel . ':' . $this->recordIds['localizedHotelId'], self::FIELD_HotelOffer,
-                               self::TABLE_Offer, 'title', '[Translate to Dansk:] Offer #1'
-                       );
-               */
+       /**
+        * @test
+        * @see DataSet/Assertion/createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent.csv
+        */
+       public function createAndLocalizeParentContentWithHotelAndOfferChildrenAndDiscardCreatedParent() {
+               parent::createAndLocalizeParentContentWithHotelAndOfferChildrenAndDiscardCreatedParent();
+               $this->assertAssertionDataSet('createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent');
+
+               $responseContent = $this->getFrontendResponse(self::VALUE_PageId, self::VALUE_LanguageId, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+               $this->assertResponseContentDoesNotHaveRecords($responseContent, self::TABLE_Content, 'header', array('Testing #1', '[Translate to Dansk:] Testing #1'));
        }
 
        /**
@@ -346,7 +327,6 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         */
        public function createAndLocalizeParentContentWithHotelAndOfferChildrenAndDiscardLocalizedParent() {
                parent::createAndLocalizeParentContentWithHotelAndOfferChildrenAndDiscardLocalizedParent();
-               // @todo Localizing the new child records is broken in the Core
                $this->assertAssertionDataSet('createNLocalizeParentContentNHotelNOfferChildrenNDiscardLocalizedParent');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, self::VALUE_LanguageId, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
@@ -377,18 +357,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
                $this->assertAssertionDataSet('modifyParentNChangeHotelChildrenSorting');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
-
-               // @todo Cannot direct select workspace version due to frontend SQL query
-               // SELECT * FROM tx_irretutorial_1ncsv_hotel
-               // WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
-               // AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
-               // AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #2', 'Hotel #1')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #2', 'Hotel #1')
+               );
        }
 
        /**
@@ -400,18 +372,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
                $this->assertAssertionDataSet('modifyParentNHotelChild');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
-
-               // @todo Cannot direct select workspace version due to frontend SQL query
-               // SELECT * FROM tx_irretutorial_1ncsv_hotel
-               // WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
-               // AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
-               // AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1', 'Testing #1')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1', 'Testing #1')
+               );
        }
 
        /**
@@ -424,18 +388,15 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Regular Element #1');
+               // Discarding the parent shall not discard the child records
                $this->assertResponseContentStructureHasRecords(
                        $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
                        self::TABLE_Hotel, 'title', array('Hotel #1', 'Testing #1')
-                       // @todo Discarding the parent record should discard the child records as well
-                       // self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
                );
-               /*
-                       $this->assertResponseContentStructureDoesNotHaveRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', 'Testing #1'
-                       );
-               */
+               $this->assertResponseContentStructureDoesNotHaveRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', 'Hotel #2'
+               );
        }
 
        /**
@@ -463,14 +424,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
                $this->assertAssertionDataSet('modifyParentNAddHotelChild');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
-
-               // @todo Child record cannot be selected since they do not point to the live record
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+               );
        }
 
        /**
@@ -492,4 +449,19 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
                );
        }
 
+       /**
+        * @test
+        * @see DataSet/modifyNDiscardNModifyParentWHotelChild.csv
+        */
+       public function modifyAndDiscardAndModifyParentWithHotelChild() {
+               parent::modifyAndDiscardAndModifyParentWithHotelChild();
+               $this->assertAssertionDataSet('modifyNDiscardNModifyParentWHotelChild');
+
+               $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+               $this->assertResponseContentDoesNotHaveRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1');
+               $this->assertResponseContentDoesNotHaveRecords($responseContent, self::TABLE_Hotel, 'header', 'Testing #1');
+               $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #2');
+               $this->assertResponseContentHasRecords($responseContent, self::TABLE_Hotel, 'title', 'Testing #2');
+       }
+
 }
index e17ebc7..a1c973d 100644 (file)
@@ -2,29 +2,29 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,256,0,0,0,1,4,0,297,0,"Regular Element #1","6,7"
-,300,89,768,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]",
+,299,-1,256,0,0,0,1,4,0,297,0,"Regular Element #1","3,4"
+,300,89,768,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]","3,4"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,256,0,0,0,1,4,0,3,0,"Hotel #1","9,10"
-,7,-1,128,0,0,0,1,4,0,4,0,"Hotel #2",11
-,8,89,32,0,0,0,1,3,0,0,4,"[MOVE-TO PLACEHOLDER for #4, WS#1]",
-,9,89,16,0,0,0,1,3,0,0,3,"[MOVE-TO PLACEHOLDER for #3, WS#1]",
+,6,-1,256,0,0,0,1,4,0,3,0,"Hotel #1","5,6"
+,7,-1,128,0,0,0,1,4,0,4,0,"Hotel #2",7
+,8,89,8,0,0,0,1,3,0,0,3,"[MOVE-TO PLACEHOLDER for #3, WS#1]","5,6"
+,9,89,16,0,0,0,1,3,0,0,4,"[MOVE-TO PLACEHOLDER for #4, WS#1]",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,256,0,0,0,1,4,0,5,0,"Offer #1.1","14,15,16"
-,10,-1,128,0,0,0,1,4,0,6,0,"Offer #1.2","17,18"
-,11,-1,64,0,0,0,1,4,0,7,0,"Offer #2.1",19
-,12,89,16,0,0,0,1,3,0,0,7,"[MOVE-TO PLACEHOLDER for #7, WS#1]",
-,13,89,8,0,0,0,1,3,0,0,6,"[MOVE-TO PLACEHOLDER for #6, WS#1]",
-,14,89,4,0,0,0,1,3,0,0,5,"[MOVE-TO PLACEHOLDER for #5, WS#1]",
+,9,-1,256,0,0,0,1,4,0,5,0,"Offer #1.1","7,8,9"
+,10,-1,128,0,0,0,1,4,0,6,0,"Offer #1.2","10,11"
+,11,-1,64,0,0,0,1,4,0,7,0,"Offer #2.1",12
+,12,89,2,0,0,0,1,3,0,0,6,"[MOVE-TO PLACEHOLDER for #6, WS#1]","10,11"
+,13,89,1,0,0,0,1,3,0,0,5,"[MOVE-TO PLACEHOLDER for #5, WS#1]","7,8,9"
+,14,89,4,0,0,0,1,3,0,0,7,"[MOVE-TO PLACEHOLDER for #7, WS#1]",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,2816,0,0,0,0,0,0,0,0,"Price #1.1.1"
@@ -40,9 +40,9 @@ tx_irretutorial_1ncsv_price
 ,17,-1,32,0,0,0,1,4,0,10,0,"Price #1.2.1"
 ,18,-1,16,0,0,0,1,4,0,11,0,"Price #1.2.2"
 ,19,-1,8,0,0,0,1,4,0,12,0,"Price #2.1.1"
-,20,89,1024,0,0,0,1,3,0,0,12,"[MOVE-TO PLACEHOLDER for #12, WS#1]"
-,21,89,768,0,0,0,1,3,0,0,11,"[MOVE-TO PLACEHOLDER for #11, WS#1]"
-,22,89,512,0,0,0,1,3,0,0,10,"[MOVE-TO PLACEHOLDER for #10, WS#1]"
-,23,89,256,0,0,0,1,3,0,0,9,"[MOVE-TO PLACEHOLDER for #9, WS#1]"
-,24,89,128,0,0,0,1,3,0,0,8,"[MOVE-TO PLACEHOLDER for #8, WS#1]"
-,25,89,64,0,0,0,1,3,0,0,7,"[MOVE-TO PLACEHOLDER for #7, WS#1]"
+,20,89,32,0,0,0,1,3,0,0,11,"[MOVE-TO PLACEHOLDER for #11, WS#1]"
+,21,89,16,0,0,0,1,3,0,0,10,"[MOVE-TO PLACEHOLDER for #10, WS#1]"
+,22,89,8,0,0,0,1,3,0,0,9,"[MOVE-TO PLACEHOLDER for #9, WS#1]"
+,23,89,4,0,0,0,1,3,0,0,8,"[MOVE-TO PLACEHOLDER for #8, WS#1]"
+,24,89,2,0,0,0,1,3,0,0,7,"[MOVE-TO PLACEHOLDER for #7, WS#1]"
+,25,89,64,0,0,0,1,3,0,0,12,"[MOVE-TO PLACEHOLDER for #12, WS#1]"
index 07822d7..68422a1 100644 (file)
@@ -10,28 +10,35 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,91,256,0,0,0,1,1,0,0,0,"Regular Element #2",
+,299,91,256,0,0,0,1,1,0,0,0,"Regular Element #2",6
 ,300,-1,256,0,0,0,1,-1,0,299,0,"Regular Element #2",6
-,301,91,128,0,0,0,1,1,0,0,0,"Regular Element #1",
-,302,-1,128,0,0,0,1,-1,0,301,0,"Regular Element #1","7,8"
+,301,91,128,0,0,0,1,1,0,0,0,"Regular Element #1","8,10"
+,302,-1,128,0,0,0,1,-1,0,301,0,"Regular Element #1","8,10"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,91,64,0,0,0,0,0,0,0,0,"Hotel #1",9
-,7,91,256,0,0,0,0,0,0,0,0,"Hotel #1","10,11"
-,8,91,128,0,0,0,0,0,0,0,0,"Hotel #2",12
+,6,91,256,0,0,0,1,1,0,0,0,"Hotel #1",9
+,7,-1,256,0,0,0,1,-1,0,6,0,"Hotel #1",9
+,8,91,128,0,0,0,1,1,0,0,0,"Hotel #1","11,13"
+,9,-1,128,0,0,0,1,-1,0,8,0,"Hotel #1","11,13"
+,10,91,64,0,0,0,1,1,0,0,0,"Hotel #2",15
+,11,-1,64,0,0,0,1,-1,0,10,0,"Hotel #2",15
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,91,32,0,0,0,0,0,0,0,0,"Offer #1.1",14
-,10,91,256,0,0,0,0,0,0,0,0,"Offer #1.1","15,16,17"
-,11,91,128,0,0,0,0,0,0,0,0,"Offer #1.2","18,19"
-,12,91,64,0,0,0,0,0,0,0,0,"Offer #2.1",20
+,9,91,256,0,0,0,1,1,0,0,0,"Offer #1.1",14
+,10,-1,256,0,0,0,1,-1,0,9,0,"Offer #1.1",14
+,11,91,128,0,0,0,1,1,0,0,0,"Offer #1.1","16,18,20"
+,12,-1,128,0,0,0,1,-1,0,11,0,"Offer #1.1","16,18,20"
+,13,91,64,0,0,0,1,1,0,0,0,"Offer #1.2","22,24"
+,14,-1,64,0,0,0,1,-1,0,13,0,"Offer #1.2","22,24"
+,15,91,32,0,0,0,1,1,0,0,0,"Offer #2.1",26
+,16,-1,32,0,0,0,1,-1,0,15,0,"Offer #2.1",26
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
@@ -41,10 +48,17 @@ tx_irretutorial_1ncsv_price
 ,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
 ,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
 ,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
-,14,91,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
-,15,91,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
-,16,91,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
-,17,91,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
-,18,91,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
-,19,91,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
-,20,91,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,14,91,256,0,0,0,1,1,0,0,0,"Price #1.1.1"
+,15,-1,256,0,0,0,1,-1,0,14,0,"Price #1.1.1"
+,16,91,128,0,0,0,1,1,0,0,0,"Price #1.1.1"
+,17,-1,128,0,0,0,1,-1,0,16,0,"Price #1.1.1"
+,18,91,64,0,0,0,1,1,0,0,0,"Price #1.1.2"
+,19,-1,64,0,0,0,1,-1,0,18,0,"Price #1.1.2"
+,20,91,32,0,0,0,1,1,0,0,0,"Price #1.1.3"
+,21,-1,32,0,0,0,1,-1,0,20,0,"Price #1.1.3"
+,22,91,16,0,0,0,1,1,0,0,0,"Price #1.2.1"
+,23,-1,16,0,0,0,1,-1,0,22,0,"Price #1.2.1"
+,24,91,8,0,0,0,1,1,0,0,0,"Price #1.2.2"
+,25,-1,8,0,0,0,1,-1,0,24,0,"Price #1.2.2"
+,26,91,4,0,0,0,1,1,0,0,0,"Price #2.1.1"
+,27,-1,4,0,0,0,1,-1,0,26,0,"Price #2.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/copyPageWHotelBeforeParentContent.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/copyPageWHotelBeforeParentContent.csv
new file mode 100644 (file)
index 0000000..bf02c58
--- /dev/null
@@ -0,0 +1,64 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,88,256,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
+,91,90,256,0,1,1,0,0,0,Relations
+,92,-1,256,0,1,-1,0,91,0,Relations
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
+,299,91,256,0,0,0,1,1,0,0,0,"Regular Element #2",10
+,300,-1,256,0,0,0,1,-1,0,299,0,"Regular Element #2",10
+,301,91,128,0,0,0,1,1,0,0,0,"Regular Element #1","6,8"
+,302,-1,128,0,0,0,1,-1,0,301,0,"Regular Element #1","6,8"
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,91,256,0,0,0,1,1,0,0,0,"Hotel #1","9,11"
+,7,-1,256,0,0,0,1,-1,0,6,0,"Hotel #1","9,11"
+,8,91,128,0,0,0,1,1,0,0,0,"Hotel #2",13
+,9,-1,128,0,0,0,1,-1,0,8,0,"Hotel #2",13
+,10,91,64,0,0,0,1,1,0,0,0,"Hotel #1",15
+,11,-1,64,0,0,0,1,-1,0,10,0,"Hotel #1",15
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,91,256,0,0,0,1,1,0,0,0,"Offer #1.1","14,16,18"
+,10,-1,256,0,0,0,1,-1,0,9,0,"Offer #1.1","14,16,18"
+,11,91,128,0,0,0,1,1,0,0,0,"Offer #1.2","20,22"
+,12,-1,128,0,0,0,1,-1,0,11,0,"Offer #1.2","20,22"
+,13,91,64,0,0,0,1,1,0,0,0,"Offer #2.1",24
+,14,-1,64,0,0,0,1,-1,0,13,0,"Offer #2.1",24
+,15,91,32,0,0,0,1,1,0,0,0,"Offer #1.1",26
+,16,-1,32,0,0,0,1,-1,0,15,0,"Offer #1.1",26
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,91,256,0,0,0,1,1,0,0,0,"Price #1.1.1"
+,15,-1,256,0,0,0,1,-1,0,14,0,"Price #1.1.1"
+,16,91,128,0,0,0,1,1,0,0,0,"Price #1.1.2"
+,17,-1,128,0,0,0,1,-1,0,16,0,"Price #1.1.2"
+,18,91,64,0,0,0,1,1,0,0,0,"Price #1.1.3"
+,19,-1,64,0,0,0,1,-1,0,18,0,"Price #1.1.3"
+,20,91,32,0,0,0,1,1,0,0,0,"Price #1.2.1"
+,21,-1,32,0,0,0,1,-1,0,20,0,"Price #1.2.1"
+,22,91,16,0,0,0,1,1,0,0,0,"Price #1.2.2"
+,23,-1,16,0,0,0,1,-1,0,22,0,"Price #1.2.2"
+,24,91,8,0,0,0,1,1,0,0,0,"Price #2.1.1"
+,25,-1,8,0,0,0,1,-1,0,24,0,"Price #2.1.1"
+,26,91,4,0,0,0,1,1,0,0,0,"Price #1.1.1"
+,27,-1,4,0,0,0,1,-1,0,26,0,"Price #1.1.1"
index c3177f4..cc538d4 100644 (file)
@@ -2,21 +2,23 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,89,128,0,0,0,1,1,0,0,0,"Regular Element #2 (copy 1)",
+,299,89,128,0,0,0,1,1,0,0,0,"Regular Element #2 (copy 1)",6
 ,300,-1,128,0,0,0,1,-1,0,299,0,"Regular Element #2 (copy 1)",6
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,89,64,0,0,0,0,0,0,0,0,"Hotel #1",9
+,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",9
+,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",9
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",14
+,9,89,16,0,0,0,1,1,0,0,0,"Offer #1.1",14
+,10,-1,16,0,0,0,1,-1,0,9,0,"Offer #1.1",14
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
@@ -26,4 +28,5 @@ tx_irretutorial_1ncsv_price
 ,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
 ,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
 ,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
-,14,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,89,2,0,0,0,1,1,0,0,0,"Price #1.1.1"
+,15,-1,2,0,0,0,1,-1,0,14,0,"Price #1.1.1"
index 4c1bdc4..da3ab29 100644 (file)
@@ -2,18 +2,19 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",
-,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",7
-,301,89,64,0,0,0,1,1,0,0,0,"Testing #1 (copy 1)",
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",6
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",6
+,301,89,64,0,0,0,1,1,0,0,0,"Testing #1 (copy 1)",8
 ,302,-1,64,0,0,0,1,-1,0,301,0,"Testing #1 (copy 1)",8
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",
-,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",10
-,8,89,32,0,0,0,1,-1,0,6,0,"Hotel #1",11
+,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",9
+,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",9
+,8,89,16,0,0,0,1,1,0,0,0,"Hotel #1",11
+,9,-1,16,0,0,0,1,-1,0,8,0,"Hotel #1",11
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
@@ -22,7 +23,8 @@ tx_irretutorial_1ncsv_offer
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
 ,9,89,16,0,0,0,1,1,0,0,0,"Offer #1",
 ,10,-1,16,0,0,0,1,-1,0,9,0,"Offer #1",
-,11,89,16,0,0,0,1,-1,0,9,0,"Offer #1",
+,11,89,8,0,0,0,1,1,0,0,0,"Offer #1",
+,12,-1,8,0,0,0,1,-1,0,11,0,"Offer #1",
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 1219ea5..d9a59f3 100644 (file)
@@ -2,19 +2,19 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",
-,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",7
-,301,89,1000000000,1,0,0,0,1,0,0,0,"Testing #1 (copy 1)",
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",6
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",6
+,301,89,1000000000,1,0,0,0,1,0,0,0,"Testing #1 (copy 1)",8
 ,302,-1,1000000000,1,0,0,0,-1,0,301,0,"Testing #1 (copy 1)",8
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",
-,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",10
-,8,89,32,0,0,0,1,-1,0,6,0,"Hotel #1",11
-,9,-1,32,0,0,0,1,2,0,8,0,"Hotel #1",12
+,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",9
+,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",9
+,8,89,1000000000,1,0,0,0,1,0,0,0,"Hotel #1",11
+,9,-1,1000000000,1,0,0,0,-1,0,8,0,"Hotel #1",11
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
@@ -23,8 +23,8 @@ tx_irretutorial_1ncsv_offer
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
 ,9,89,16,0,0,0,1,1,0,0,0,"Offer #1",
 ,10,-1,16,0,0,0,1,-1,0,9,0,"Offer #1",
-,11,89,16,0,0,0,1,-1,0,9,0,"Offer #1",
-,12,-1,16,0,0,0,1,2,0,11,0,"Offer #1",
+,11,89,1000000000,1,0,0,0,1,0,0,0,"Offer #1",
+,12,-1,1000000000,1,0,0,0,-1,0,11,0,"Offer #1",
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index f281052..ea6cff3 100644 (file)
@@ -2,19 +2,19 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",
-,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",7
-,301,89,192,0,1,299,1,1,0,0,0,"[Translate to Dansk:] Testing #1",
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",6
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",6
+,301,89,192,0,1,299,1,1,0,0,0,"[Translate to Dansk:] Testing #1",8
 ,302,-1,192,0,1,299,1,-1,0,301,0,"[Translate to Dansk:] Testing #1",8
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",
-,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",10
-,8,89,48,0,1,7,1,1,0,0,0,"[Translate to Dansk:] Hotel #1",
-,9,-1,48,0,1,7,1,-1,0,8,0,"[Translate to Dansk:] Hotel #1",11
+,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",9
+,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",9
+,8,89,48,0,1,6,1,1,0,0,0,"[Translate to Dansk:] Hotel #1",11
+,9,-1,48,0,1,6,1,-1,0,8,0,"[Translate to Dansk:] Hotel #1",11
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
@@ -23,8 +23,8 @@ tx_irretutorial_1ncsv_offer
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
 ,9,89,16,0,0,0,1,1,0,0,0,"Offer #1",
 ,10,-1,16,0,0,0,1,-1,0,9,0,"Offer #1",
-,11,89,24,0,1,10,1,1,0,0,0,"[Translate to Dansk:] Offer #1",
-,12,-1,24,0,1,10,1,-1,0,11,0,"[Translate to Dansk:] Offer #1",
+,11,89,24,0,1,9,1,1,0,0,0,"[Translate to Dansk:] Offer #1",
+,12,-1,24,0,1,9,1,-1,0,11,0,"[Translate to Dansk:] Offer #1",
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent.csv
new file mode 100644 (file)
index 0000000..12d3178
--- /dev/null
@@ -0,0 +1,36 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
+,299,89,1000000000,1,0,0,0,1,0,0,0,"Testing #1",6
+,300,-1,1000000000,1,0,0,0,-1,0,299,0,"Testing #1",6
+,301,89,1000000000,1,1,299,0,1,0,0,0,"[Translate to Dansk:] Testing #1",8
+,302,-1,1000000000,1,1,299,0,-1,0,301,0,"[Translate to Dansk:] Testing #1",8
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,1000000000,1,0,0,0,1,0,0,0,"Hotel #1",9
+,7,-1,1000000000,1,0,0,0,-1,0,6,0,"Hotel #1",9
+,8,89,1000000000,1,1,6,0,1,0,0,0,"[Translate to Dansk:] Hotel #1",11
+,9,-1,1000000000,1,1,6,0,-1,0,8,0,"[Translate to Dansk:] Hotel #1",11
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,89,1000000000,1,0,0,0,1,0,0,0,"Offer #1",
+,10,-1,1000000000,1,0,0,0,-1,0,9,0,"Offer #1",
+,11,89,1000000000,1,1,9,0,1,0,0,0,"[Translate to Dansk:] Offer #1",
+,12,-1,1000000000,1,1,9,0,-1,0,11,0,"[Translate to Dansk:] Offer #1",
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
index b68578a..7dc6fce 100644 (file)
@@ -2,19 +2,19 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",
-,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",7
-,301,89,1000000000,1,1,299,0,1,0,0,0,"[Translate to Dansk:] Testing #1",
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",6
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",6
+,301,89,1000000000,1,1,299,0,1,0,0,0,"[Translate to Dansk:] Testing #1",8
 ,302,-1,1000000000,1,1,299,0,-1,0,301,0,"[Translate to Dansk:] Testing #1",8
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",
-,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",10
-,8,89,1000000000,1,1,7,0,1,0,0,0,"[Translate to Dansk:] Hotel #1",
-,9,-1,1000000000,1,1,7,0,-1,0,8,0,"[Translate to Dansk:] Hotel #1",11
+,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",9
+,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",9
+,8,89,1000000000,1,1,6,0,1,0,0,0,"[Translate to Dansk:] Hotel #1",11
+,9,-1,1000000000,1,1,6,0,-1,0,8,0,"[Translate to Dansk:] Hotel #1",11
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
@@ -23,8 +23,8 @@ tx_irretutorial_1ncsv_offer
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
 ,9,89,16,0,0,0,1,1,0,0,0,"Offer #1",
 ,10,-1,16,0,0,0,1,-1,0,9,0,"Offer #1",
-,11,89,1000000000,1,1,10,0,1,0,0,0,"[Translate to Dansk:] Offer #1",
-,12,-1,1000000000,1,1,10,0,-1,0,11,0,"[Translate to Dansk:] Offer #1",
+,11,89,1000000000,1,1,9,0,1,0,0,0,"[Translate to Dansk:] Offer #1",
+,12,-1,1000000000,1,1,9,0,-1,0,11,0,"[Translate to Dansk:] Offer #1",
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 3b0d8a2..8171a24 100644 (file)
@@ -2,15 +2,15 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",
-,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",7
+,299,89,128,0,0,0,1,1,0,0,0,"Testing #1",6
+,300,-1,128,0,0,0,1,-1,0,299,0,"Testing #1",6
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",
-,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",10
+,6,89,32,0,0,0,1,1,0,0,0,"Hotel #1",9
+,7,-1,32,0,0,0,1,-1,0,6,0,"Hotel #1",9
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
index 2ad50d9..96e4af9 100644 (file)
@@ -2,20 +2,20 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,512,0,0,0,1,2,0,298,0,"Regular Element #2",6
+,299,-1,512,0,0,0,1,2,0,298,0,"Regular Element #2",5
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,64,0,0,0,1,2,0,5,0,"Hotel #1",9
+,6,-1,64,0,0,0,1,2,0,5,0,"Hotel #1",8
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,32,0,0,0,1,2,0,8,0,"Offer #1.1",14
+,9,-1,32,0,0,0,1,2,0,8,0,"Offer #1.1",13
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 1506dd7..3092b16 100644 (file)
@@ -2,14 +2,14 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,89,768,0,1,298,1,1,0,0,0,"[Translate to Dansk:] Regular Element #2",
+,299,89,768,0,1,298,1,1,0,0,0,"[Translate to Dansk:] Regular Element #2",6
 ,300,-1,768,0,1,298,1,-1,0,299,0,"[Translate to Dansk:] Regular Element #2",6
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,89,96,0,1,5,1,1,0,0,0,"[Translate to Dansk:] Hotel #1",
+,6,89,96,0,1,5,1,1,0,0,0,"[Translate to Dansk:] Hotel #1",9
 ,7,-1,96,0,1,5,1,-1,0,6,0,"[Translate to Dansk:] Hotel #1",9
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
@@ -17,7 +17,7 @@ tx_irretutorial_1ncsv_offer
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,89,48,0,1,8,1,1,0,0,0,"[Translate to Dansk:] Offer #1.1",
+,9,89,48,0,1,8,1,1,0,0,0,"[Translate to Dansk:] Offer #1.1",14
 ,10,-1,48,0,1,8,1,-1,0,9,0,"[Translate to Dansk:] Offer #1.1",14
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/modifyNDiscardNModifyParentWHotelChild.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Modify/DataSet/modifyNDiscardNModifyParentWHotelChild.csv
new file mode 100644 (file)
index 0000000..e8205ba
--- /dev/null
@@ -0,0 +1,38 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
+,299,-1,256,0,0,0,0,0,0,297,0,"Testing #1","3,4"
+,300,-1,256,0,0,0,1,0,0,297,0,"Testing #2","3,4"
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","5,6"
+,7,-1,128,0,0,0,0,0,0,4,0,"Testing #1",7
+,8,-1,128,0,0,0,1,0,0,4,0,"Testing #2",7
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","7,8,9"
+,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","10,11"
+,11,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",12
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,-1,256,0,0,0,1,0,0,7,0,"Price #1.1.1"
+,15,-1,128,0,0,0,1,0,0,8,0,"Price #1.1.2"
+,16,-1,64,0,0,0,1,0,0,9,0,"Price #1.1.3"
+,17,-1,32,0,0,0,1,0,0,10,0,"Price #1.2.1"
+,18,-1,16,0,0,0,1,0,0,11,0,"Price #1.2.2"
+,19,-1,8,0,0,0,1,0,0,12,0,"Price #2.1.1"
index df66083..178de27 100644 (file)
@@ -7,14 +7,14 @@ tx_irretutorial_1ncsv_hotel
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,128,0,0,0,1,0,0,4,0,"Testing #1",9
+,6,-1,128,0,0,0,1,0,0,4,0,"Testing #1",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",14
+,9,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index e94c199..eda237b 100644 (file)
@@ -2,20 +2,20 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,512,0,0,0,1,0,0,298,0,"Testing #1",6
+,299,-1,512,0,0,0,1,0,0,298,0,"Testing #1",5
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,64,0,0,0,1,0,0,5,0,"Hotel #1",9
+,6,-1,64,0,0,0,1,0,0,5,0,"Hotel #1",8
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,32,0,0,0,1,0,0,8,0,"Offer #1.1",14
+,9,-1,32,0,0,0,1,0,0,8,0,"Offer #1.1",13
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 7cce712..dba2880 100644 (file)
@@ -2,13 +2,13 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,512,0,0,0,1,0,0,298,0,"Regular Element #2","6,8"
+,299,-1,512,0,0,0,1,0,0,298,0,"Regular Element #2","5,7"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,64,0,0,0,1,0,0,5,0,"Hotel #1",9
+,6,-1,64,0,0,0,1,0,0,5,0,"Hotel #1",8
 ,7,89,32,0,0,0,1,1,0,0,0,"Hotel #2",
 ,8,-1,32,0,0,0,1,-1,0,7,0,"Hotel #2",
 tx_irretutorial_1ncsv_offer
@@ -17,7 +17,7 @@ tx_irretutorial_1ncsv_offer
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,32,0,0,0,1,0,0,8,0,"Offer #1.1",14
+,9,-1,32,0,0,0,1,0,0,8,0,"Offer #1.1",13
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index f337095..e5cfbaa 100644 (file)
@@ -2,23 +2,23 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,256,0,0,0,1,0,0,297,0,"Regular Element #1","7,6"
+,299,-1,256,0,0,0,1,0,0,297,0,"Regular Element #1","4,3"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","9,10"
-,7,-1,128,0,0,0,1,0,0,4,0,"Hotel #2",11
+,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","5,6"
+,7,-1,128,0,0,0,1,0,0,4,0,"Hotel #2",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","14,15,16"
-,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","17,18"
-,11,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",19
+,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","7,8,9"
+,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","10,11"
+,11,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 2550b96..96c705c 100644 (file)
@@ -2,23 +2,23 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,256,0,0,0,1,0,0,297,0,"Regular Element #1",6
+,299,-1,256,0,0,0,1,0,0,297,0,"Regular Element #1",3
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","9,10"
-,7,-1,128,0,0,0,1,2,0,4,0,"Hotel #2",11
+,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","5,6"
+,7,-1,128,0,0,0,1,2,0,4,0,"Hotel #2",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","14,15,16"
-,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","17,18"
-,11,-1,64,0,0,0,1,2,0,7,0,"Offer #2.1",19
+,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","7,8,9"
+,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","10,11"
+,11,-1,64,0,0,0,1,2,0,7,0,"Offer #2.1",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 8d065f6..0740d5a 100644 (file)
@@ -2,23 +2,23 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,256,0,0,0,1,0,0,297,0,"Regular Element #1","6,7"
+,299,-1,256,0,0,0,1,0,0,297,0,"Regular Element #1","3,4"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","9,10"
-,7,-1,128,0,0,0,1,0,0,4,0,"Testing #1",11
+,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","5,6"
+,7,-1,128,0,0,0,1,0,0,4,0,"Testing #1",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","14,15,16"
-,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","17,18"
-,11,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",19
+,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","7,8,9"
+,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","10,11"
+,11,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 0c80944..f6a2a6f 100644 (file)
@@ -2,23 +2,23 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","6,7"
+,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","3,4"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","9,10"
-,7,-1,128,0,0,0,0,0,0,4,0,"Testing #1",11
+,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","5,6"
+,7,-1,128,0,0,0,0,0,0,4,0,"Testing #1",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","14,15,16"
-,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","17,18"
-,11,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",19
+,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","7,8,9"
+,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","10,11"
+,11,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index e4d41f6..1bfce92 100644 (file)
@@ -2,23 +2,23 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","6,7"
+,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","3,4"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","9,10"
-,7,-1,128,0,0,0,1,0,0,4,0,"Testing #1",11
+,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","5,6"
+,7,-1,128,0,0,0,1,0,0,4,0,"Testing #1",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","14,15,16"
-,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","17,18"
-,11,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",19
+,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","7,8,9"
+,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","10,11"
+,11,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index bf93e52..ec2b327 100644 (file)
@@ -2,23 +2,23 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,512,0,0,0,1,4,0,298,0,"Regular Element #2",6
-,300,90,256,0,0,0,1,3,0,0,298,"[MOVE-TO PLACEHOLDER for #298, WS#1]",
+,299,-1,512,0,0,0,1,4,0,298,0,"Regular Element #2",5
+,300,90,256,0,0,0,1,3,0,0,298,"[MOVE-TO PLACEHOLDER for #298, WS#1]",5
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,64,0,0,0,1,4,0,5,0,"Hotel #1",9
-,7,90,256,0,0,0,1,3,0,0,5,"[MOVE-TO PLACEHOLDER for #5, WS#1]",
+,6,-1,64,0,0,0,1,4,0,5,0,"Hotel #1",8
+,7,90,256,0,0,0,1,3,0,0,5,"[MOVE-TO PLACEHOLDER for #5, WS#1]",8
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,32,0,0,0,1,4,0,8,0,"Offer #1.1",14
-,10,90,256,0,0,0,1,3,0,0,8,"[MOVE-TO PLACEHOLDER for #8, WS#1]",
+,9,-1,32,0,0,0,1,4,0,8,0,"Offer #1.1",13
+,10,90,256,0,0,0,1,3,0,0,8,"[MOVE-TO PLACEHOLDER for #8, WS#1]",13
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index e10a8cb..ff36f0e 100644 (file)
@@ -2,35 +2,35 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,512,0,0,0,1,4,0,298,0,"Regular Element #2",6
-,300,90,256,0,0,0,1,3,0,0,298,"[MOVE-TO PLACEHOLDER for #298, WS#1]",
-,301,-1,256,0,0,0,1,4,0,297,0,"Regular Element #1","8,9"
-,302,90,512,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]",
+,299,-1,512,0,0,0,1,4,0,298,0,"Regular Element #2",5
+,300,90,256,0,0,0,1,3,0,0,298,"[MOVE-TO PLACEHOLDER for #298, WS#1]",5
+,301,-1,256,0,0,0,1,4,0,297,0,"Regular Element #1","3,4"
+,302,90,512,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]","3,4"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,64,0,0,0,1,4,0,5,0,"Hotel #1",9
-,7,90,256,0,0,0,1,3,0,0,5,"[MOVE-TO PLACEHOLDER for #5, WS#1]",
-,8,-1,256,0,0,0,1,4,0,3,0,"Hotel #1","11,12"
-,9,-1,128,0,0,0,1,4,0,4,0,"Hotel #2",13
-,10,90,128,0,0,0,1,3,0,0,4,"[MOVE-TO PLACEHOLDER for #4, WS#1]",
-,11,90,64,0,0,0,1,3,0,0,3,"[MOVE-TO PLACEHOLDER for #3, WS#1]",
+,6,-1,64,0,0,0,1,4,0,5,0,"Hotel #1",8
+,7,90,256,0,0,0,1,3,0,0,5,"[MOVE-TO PLACEHOLDER for #5, WS#1]",8
+,8,-1,256,0,0,0,1,4,0,3,0,"Hotel #1","5,6"
+,9,-1,128,0,0,0,1,4,0,4,0,"Hotel #2",7
+,10,90,32,0,0,0,1,3,0,0,3,"[MOVE-TO PLACEHOLDER for #3, WS#1]","5,6"
+,11,90,64,0,0,0,1,3,0,0,4,"[MOVE-TO PLACEHOLDER for #4, WS#1]",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,32,0,0,0,1,4,0,8,0,"Offer #1.1",14
-,10,90,256,0,0,0,1,3,0,0,8,"[MOVE-TO PLACEHOLDER for #8, WS#1]",
-,11,-1,256,0,0,0,1,4,0,5,0,"Offer #1.1","16,17,18"
-,12,-1,128,0,0,0,1,4,0,6,0,"Offer #1.2","19,20"
-,13,-1,64,0,0,0,1,4,0,7,0,"Offer #2.1",21
-,14,90,128,0,0,0,1,3,0,0,7,"[MOVE-TO PLACEHOLDER for #7, WS#1]",
-,15,90,64,0,0,0,1,3,0,0,6,"[MOVE-TO PLACEHOLDER for #6, WS#1]",
-,16,90,32,0,0,0,1,3,0,0,5,"[MOVE-TO PLACEHOLDER for #5, WS#1]",
+,9,-1,32,0,0,0,1,4,0,8,0,"Offer #1.1",13
+,10,90,256,0,0,0,1,3,0,0,8,"[MOVE-TO PLACEHOLDER for #8, WS#1]",13
+,11,-1,256,0,0,0,1,4,0,5,0,"Offer #1.1","7,8,9"
+,12,-1,128,0,0,0,1,4,0,6,0,"Offer #1.2","10,11"
+,13,-1,64,0,0,0,1,4,0,7,0,"Offer #2.1",12
+,14,90,16,0,0,0,1,3,0,0,6,"[MOVE-TO PLACEHOLDER for #6, WS#1]","10,11"
+,15,90,8,0,0,0,1,3,0,0,5,"[MOVE-TO PLACEHOLDER for #5, WS#1]","7,8,9"
+,16,90,32,0,0,0,1,3,0,0,7,"[MOVE-TO PLACEHOLDER for #7, WS#1]",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
@@ -41,16 +41,16 @@ tx_irretutorial_1ncsv_price
 ,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
 ,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
 ,14,-1,4,0,0,0,1,4,0,13,0,"Price #1.1.1"
-,15,90,256,0,0,0,1,3,0,0,13,"[MOVE-TO PLACEHOLDER for #13, WS#1]"
+,15,90,2048,0,0,0,1,3,0,0,13,"[MOVE-TO PLACEHOLDER for #13, WS#1]"
 ,16,-1,256,0,0,0,1,4,0,7,0,"Price #1.1.1"
 ,17,-1,128,0,0,0,1,4,0,8,0,"Price #1.1.2"
 ,18,-1,64,0,0,0,1,4,0,9,0,"Price #1.1.3"
 ,19,-1,32,0,0,0,1,4,0,10,0,"Price #1.2.1"
 ,20,-1,16,0,0,0,1,4,0,11,0,"Price #1.2.2"
 ,21,-1,8,0,0,0,1,4,0,12,0,"Price #2.1.1"
-,22,90,128,0,0,0,1,3,0,0,12,"[MOVE-TO PLACEHOLDER for #12, WS#1]"
-,23,90,64,0,0,0,1,3,0,0,11,"[MOVE-TO PLACEHOLDER for #11, WS#1]"
-,24,90,32,0,0,0,1,3,0,0,10,"[MOVE-TO PLACEHOLDER for #10, WS#1]"
-,25,90,16,0,0,0,1,3,0,0,9,"[MOVE-TO PLACEHOLDER for #9, WS#1]"
-,26,90,8,0,0,0,1,3,0,0,8,"[MOVE-TO PLACEHOLDER for #8, WS#1]"
-,27,90,4,0,0,0,1,3,0,0,7,"[MOVE-TO PLACEHOLDER for #7, WS#1]"
+,22,90,1024,0,0,0,1,3,0,0,11,"[MOVE-TO PLACEHOLDER for #11, WS#1]"
+,23,90,768,0,0,0,1,3,0,0,10,"[MOVE-TO PLACEHOLDER for #10, WS#1]"
+,24,90,512,0,0,0,1,3,0,0,9,"[MOVE-TO PLACEHOLDER for #9, WS#1]"
+,25,90,256,0,0,0,1,3,0,0,8,"[MOVE-TO PLACEHOLDER for #8, WS#1]"
+,26,90,128,0,0,0,1,3,0,0,7,"[MOVE-TO PLACEHOLDER for #7, WS#1]"
+,27,90,1280,0,0,0,1,3,0,0,12,"[MOVE-TO PLACEHOLDER for #12, WS#1]"
index 9ef69c6..8a32c3c 100644 (file)
@@ -68,18 +68,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1');
-
-               // @todo Cannot direct select workspace version due to frontend SQL query
-               // SELECT * FROM tx_irretutorial_1ncsv_hotel
-               // WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
-               // AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
-               // AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1')
+               );
        }
 
        /**
@@ -114,7 +106,6 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         * @see DataSet/Assertion/copyParentContentRecord.csv
         */
        public function copyParentContent() {
-               $this->markTestSkipped('Skipped due to core bugs...');
                parent::copyParentContent();
                $this->actionService->publishRecord(self::TABLE_Content, $this->recordIds['newContentId']);
                $this->assertAssertionDataSet('copyParentContent');
@@ -131,7 +122,6 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         * @see DataSet/Assertion/localizeParentContentRecord.csv
         */
        public function localizeParentContent() {
-               $this->markTestSkipped('Skipped due to core bugs...');
                parent::localizeParentContent();
                $this->actionService->publishRecord(self::TABLE_Content, $this->recordIds['localizedContentId']);
                $this->assertAssertionDataSet('localizeParentContent');
@@ -153,22 +143,14 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
                $this->assertAssertionDataSet('changeParentContentSorting');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0)->getResponseContent();
-
-               // @todo Cannot direct select workspace version due to frontend SQL query
-               // SELECT * FROM tx_irretutorial_1ncsv_hotel
-               // WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
-               // AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
-               // AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
-                       );
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+               );
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1')
+               );
        }
 
        /**
@@ -182,14 +164,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageIdTarget, 0)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Regular Element #2');
-
-               // @todo Workspace child records gets lost due to core bug
-               /*
                $this->assertResponseContentStructureHasRecords(
                        $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
                        self::TABLE_Hotel, 'title', array('Hotel #1')
                );
-               */
        }
 
        /**
@@ -207,22 +185,14 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageIdTarget, 0)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', array('Regular Element #2', 'Regular Element #1'));
-
-               // @todo Cannot direct select workspace version due to frontend SQL query
-               // SELECT * FROM tx_irretutorial_1ncsv_hotel
-               // WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
-               // AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
-               // AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
-                       );
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+               );
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1')
+               );
        }
 
        /**
@@ -264,9 +234,13 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         * @see DataSet/Assertion/copyPageRecord.csv
         */
        public function copyPage() {
-               $this->markTestSkipped('Skipped due to core bugs...');
                parent::copyPage();
-               $this->actionService->publishRecord(self::TABLE_Page, $this->recordIds['newPageId']);
+               $this->actionService->publishRecords(
+                       array(
+                               self::TABLE_Page => array($this->recordIds['newPageId']),
+                               self::TABLE_Content => array($this->recordIds['newContentIdFirst'], $this->recordIds['newContentIdLast']),
+                       )
+               );
                $this->assertAssertionDataSet('copyPage');
 
                $responseContent = $this->getFrontendResponse($this->recordIds['newPageId'], 0)->getResponseContent();
@@ -274,6 +248,24 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
        }
 
        /**
+        * @test
+        * @see DataSet/Assertion/copyPageWHotelBeforeParentContent.csv
+        */
+       public function copyPageWithHotelBeforeParentContent() {
+               parent::copyPageWithHotelBeforeParentContent();
+               $this->actionService->publishRecords(
+                       array(
+                               self::TABLE_Page => array($this->recordIds['newPageId']),
+                               self::TABLE_Content => array($this->recordIds['newContentIdFirst'], $this->recordIds['newContentIdLast']),
+                       )
+               );
+               $this->assertAssertionDataSet('copyPageWHotelBeforeParentContent');
+
+               $responseContent = $this->getFrontendResponse($this->recordIds['newPageId'], 0)->getResponseContent();
+               $this->assertResponseContentHasRecords($responseContent, self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2', 'Hotel #1'));
+       }
+
+       /**
         * IRRE Child Records
         */
 
@@ -288,14 +280,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1');
-
-               // @todo Shadow fields are not correct on the new placeholder
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . $this->recordIds['newContentId'], self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', 'Hotel #1'
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . $this->recordIds['newContentId'], self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', 'Hotel #1'
+               );
        }
 
        /**
@@ -303,31 +291,25 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         * @see DataSet/Assertion/createAndCopyParentContentRecordWithHotelAndOfferChildRecords.csv
         */
        public function createAndCopyParentContentWithHotelAndOfferChildren() {
-               $this->markTestSkipped('Skipped due to core bugs...');
                parent::createAndCopyParentContentWithHotelAndOfferChildren();
-               // @todo Copying the new child records is broken in the Core
                $this->actionService->publishRecord(self::TABLE_Content, $this->recordIds['newContentId']);
                $this->actionService->publishRecord(self::TABLE_Content, $this->recordIds['copiedContentId']);
                $this->assertAssertionDataSet('createNCopyParentContentNHotelNOfferChildren');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1 (copy 1)');
-
-               // @todo Shadow fields are not correct on the new placeholder
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . $this->recordIds['newContentId'], self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', 'Hotel #1'
-                       );
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . $this->recordIds['copiedContentId'], self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', 'Hotel #1'
-                       );
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Hotel . ':' . $this->recordIds['copiedHotelId'], self::FIELD_HotelOffer,
-                               self::TABLE_Offer, 'title', 'Offer #1'
-                       );
-                */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . $this->recordIds['newContentId'], self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', 'Hotel #1'
+               );
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . $this->recordIds['copiedContentId'], self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', 'Hotel #1'
+               );
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Hotel . ':' . $this->recordIds['copiedHotelId'], self::FIELD_HotelOffer,
+                       self::TABLE_Offer, 'title', 'Offer #1'
+               );
        }
 
        /**
@@ -336,7 +318,6 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         */
        public function createAndCopyParentContentWithHotelAndOfferChildrenAndDiscardCopiedParent() {
                parent::createAndCopyParentContentWithHotelAndOfferChildrenAndDiscardCopiedParent();
-               // @todo Copying the new child records is broken in the Core
                $this->actionService->publishRecord(self::TABLE_Content, $this->recordIds['newContentId']);
                // Actually this is not required, since there's nothing to publish... but it's a test case!
                $this->actionService->publishRecord(self::TABLE_Content, $this->recordIds['copiedContentId'], FALSE);
@@ -351,27 +332,35 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         * @see DataSet/Assertion/createAndLocalizeParentContentRecordWithHotelAndOfferChildRecords.csv
         */
        public function createAndLocalizeParentContentWithHotelAndOfferChildren() {
-               $this->markTestSkipped('Skipped due to core bugs...');
                parent::createAndLocalizeParentContentWithHotelAndOfferChildren();
-               // @todo Localizing the new child records is broken in the Core
                $this->actionService->publishRecord(self::TABLE_Content, $this->recordIds['newContentId']);
                $this->actionService->publishRecord(self::TABLE_Content, $this->recordIds['localizedContentId']);
                $this->assertAssertionDataSet('createNLocalizeParentContentNHotelNOfferChildren');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, self::VALUE_LanguageId)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', '[Translate to Dansk:] Testing #1');
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . $this->recordIds['newContentId'], self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', '[Translate to Dansk:] Hotel #1'
+               );
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Hotel . ':' . $this->recordIds['localizedHotelId'], self::FIELD_HotelOffer,
+                       self::TABLE_Offer, 'title', '[Translate to Dansk:] Offer #1'
+               );
+       }
+
+       /**
+        * @test
+        * @see DataSet/Assertion/createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent.csv
+        */
+       public function createAndLocalizeParentContentWithHotelAndOfferChildrenAndDiscardCreatedParent() {
+               parent::createAndLocalizeParentContentWithHotelAndOfferChildrenAndDiscardCreatedParent();
+               // Actually this is not required, since there's nothing to publish... but it's a test case!
+               $this->actionService->publishRecord(self::TABLE_Content, $this->recordIds['newContentId'], FALSE);
+               $this->assertAssertionDataSet('createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent');
 
-               // @todo Does not work since children don't point to live-default record
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . $this->recordIds['localizedContentId'], self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', '[Translate to Dansk:] Hotel #1'
-                       );
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Hotel . ':' . $this->recordIds['localizedHotelId'], self::FIELD_HotelOffer,
-                               self::TABLE_Offer, 'title', '[Translate to Dansk:] Offer #1'
-                       );
-               */
+               $responseContent = $this->getFrontendResponse(self::VALUE_PageId, self::VALUE_LanguageId)->getResponseContent();
+               $this->assertResponseContentDoesNotHaveRecords($responseContent, self::TABLE_Content, 'header', array('Testing #1', '[Translate to Dansk:] Testing #1'));
        }
 
        /**
@@ -380,7 +369,6 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         */
        public function createAndLocalizeParentContentWithHotelAndOfferChildrenAndDiscardLocalizedParent() {
                parent::createAndLocalizeParentContentWithHotelAndOfferChildrenAndDiscardLocalizedParent();
-               // @todo Localizing the new child records is broken in the Core
                $this->actionService->publishRecord(self::TABLE_Content, $this->recordIds['newContentId']);
                // Actually this is not required, since there's nothing to publish... but it's a test case!
                $this->actionService->publishRecord(self::TABLE_Content, $this->recordIds['localizedContentId'], FALSE);
@@ -416,18 +404,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
                $this->assertAssertionDataSet('modifyParentNChangeHotelChildrenSorting');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0)->getResponseContent();
-
-               // @todo Cannot direct select workspace version due to frontend SQL query
-               // SELECT * FROM tx_irretutorial_1ncsv_hotel
-               // WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
-               // AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
-               // AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #2', 'Hotel #1')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #2', 'Hotel #1')
+               );
        }
 
        /**
@@ -440,18 +420,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
                $this->assertAssertionDataSet('modifyParentNHotelChild');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0)->getResponseContent();
-
-               // @todo Cannot direct select workspace version due to frontend SQL query
-               // SELECT * FROM tx_irretutorial_1ncsv_hotel
-               // WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
-               // AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
-               // AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1', 'Testing #1')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1', 'Testing #1')
+               );
        }
 
        /**
@@ -459,7 +431,6 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         * @see DataSet/Assertion/modifyParentRecordWithHotelChildRecordAndDiscardModifiedParentRecord.csv
         */
        public function modifyParentWithHotelChildAndDiscardModifiedParent() {
-               $this->markTestSkipped('Skipped due to core bugs...');
                parent::modifyParentWithHotelChildAndDiscardModifiedParent();
                // Actually this is not required, since there's nothing to publish... but it's a test case!
                $this->actionService->publishRecord(self::TABLE_Content, self::VALUE_ContentIdFirst, FALSE);
@@ -467,18 +438,16 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Regular Element #1');
+               // Discarding the parent shall not discard the child records
+               // Since the discarded parent does not need to be published, version children are not published as well
                $this->assertResponseContentStructureHasRecords(
                        $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
-                       self::TABLE_Hotel, 'title', array('Hotel #1', 'Testing #1')
-                       // @todo Discarding the parent record should discard the child records as well
-                       // self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+                       self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+               );
+               $this->assertResponseContentStructureDoesNotHaveRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', 'Testing #1'
                );
-               /*
-                       $this->assertResponseContentStructureDoesNotHaveRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', 'Testing #1'
-                       );
-               */
        }
 
        /**
@@ -509,14 +478,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
                $this->assertAssertionDataSet('modifyParentNAddHotelChild');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0)->getResponseContent();
-
-               // @todo Child record cannot be selected since they do not point to the live record
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+               );
        }
 
        /**
@@ -539,4 +504,25 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
                );
        }
 
+       /**
+        * @test
+        * @see DataSet/modifyNDiscardNModifyParentWHotelChild.csv
+        */
+       public function modifyAndDiscardAndModifyParentWithHotelChild() {
+               parent::modifyAndDiscardAndModifyParentWithHotelChild();
+               $this->actionService->publishRecords(
+                       array(
+                               self::TABLE_Content => array(self::VALUE_ContentIdFirst),
+                               self::TABLE_Hotel => array(3, 4),
+                       )
+               );
+               $this->assertAssertionDataSet('modifyNDiscardNModifyParentWHotelChild');
+
+               $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseContent();
+               $this->assertResponseContentDoesNotHaveRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1');
+               $this->assertResponseContentDoesNotHaveRecords($responseContent, self::TABLE_Hotel, 'header', 'Testing #1');
+               $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #2');
+               $this->assertResponseContentHasRecords($responseContent, self::TABLE_Hotel, 'title', 'Testing #2');
+       }
+
 }
index 58060db..1143254 100644 (file)
@@ -2,31 +2,31 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,768,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","6,7"
+,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","3,4"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
-,3,89,16,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
-,4,89,32,0,0,0,0,0,0,0,0,"Hotel #2",7
+,3,89,8,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,16,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,256,0,0,0,0,0,0,3,0,"Hotel #1","9,10"
-,7,-1,128,0,0,0,0,0,0,4,0,"Hotel #2",11
+,6,-1,256,0,0,0,0,0,0,3,0,"Hotel #1","5,6"
+,7,-1,128,0,0,0,0,0,0,4,0,"Hotel #2",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
-,5,89,4,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
-,6,89,8,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
-,7,89,16,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,5,89,1,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,2,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,4,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,256,0,0,0,0,0,0,5,0,"Offer #1.1","14,15,16"
-,10,-1,128,0,0,0,0,0,0,6,0,"Offer #1.2","17,18"
-,11,-1,64,0,0,0,0,0,0,7,0,"Offer #2.1",19
+,9,-1,256,0,0,0,0,0,0,5,0,"Offer #1.1","7,8,9"
+,10,-1,128,0,0,0,0,0,0,6,0,"Offer #1.2","10,11"
+,11,-1,64,0,0,0,0,0,0,7,0,"Offer #2.1",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
-,7,89,64,0,0,0,0,0,0,0,0,"Price #1.1.1"
-,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
-,9,89,256,0,0,0,0,0,0,0,0,"Price #1.1.3"
-,10,89,512,0,0,0,0,0,0,0,0,"Price #1.2.1"
-,11,89,768,0,0,0,0,0,0,0,0,"Price #1.2.2"
-,12,89,1024,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,7,89,2,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,4,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,8,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,16,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,32,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,64,0,0,0,0,0,0,0,0,"Price #2.1.1"
 ,13,89,1280,0,0,0,0,0,0,0,0,"Price #1.1.1"
 ,14,-1,256,0,0,0,0,0,0,7,0,"Price #1.1.1"
 ,15,-1,128,0,0,0,0,0,0,8,0,"Price #1.1.2"
index 795f2bc..192d14b 100644 (file)
@@ -9,28 +9,26 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,91,256,0,0,0,1,1,0,0,0,"Regular Element #2",
-,300,-1,256,0,0,0,1,-1,0,299,0,"Regular Element #2",6
-,301,91,128,0,0,0,1,1,0,0,0,"Regular Element #1",
-,302,-1,128,0,0,0,1,-1,0,301,0,"Regular Element #1","7,8"
+,299,91,256,0,0,0,0,0,0,0,0,"Regular Element #2",6
+,301,91,128,0,0,0,0,0,0,0,0,"Regular Element #1","8,10"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,91,64,0,0,0,0,0,0,0,0,"Hotel #1",9
-,7,91,256,0,0,0,0,0,0,0,0,"Hotel #1","10,11"
-,8,91,128,0,0,0,0,0,0,0,0,"Hotel #2",12
+,6,91,256,0,0,0,0,0,0,0,0,"Hotel #1",9
+,8,91,128,0,0,0,0,0,0,0,0,"Hotel #1","11,13"
+,10,91,64,0,0,0,0,0,0,0,0,"Hotel #2",15
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,91,32,0,0,0,0,0,0,0,0,"Offer #1.1",14
-,10,91,256,0,0,0,0,0,0,0,0,"Offer #1.1","15,16,17"
-,11,91,128,0,0,0,0,0,0,0,0,"Offer #1.2","18,19"
-,12,91,64,0,0,0,0,0,0,0,0,"Offer #2.1",20
+,9,91,256,0,0,0,0,0,0,0,0,"Offer #1.1",14
+,11,91,128,0,0,0,0,0,0,0,0,"Offer #1.1","16,18,20"
+,13,91,64,0,0,0,0,0,0,0,0,"Offer #1.2","22,24"
+,15,91,32,0,0,0,0,0,0,0,0,"Offer #2.1",26
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
@@ -40,10 +38,10 @@ tx_irretutorial_1ncsv_price
 ,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
 ,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
 ,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
-,14,91,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
-,15,91,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
-,16,91,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
-,17,91,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
-,18,91,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
-,19,91,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
-,20,91,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,14,91,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,16,91,128,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,18,91,64,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,20,91,32,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,22,91,16,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,24,91,8,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,26,91,4,0,0,0,0,0,0,0,0,"Price #2.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/copyPageWHotelBeforeParentContent.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/copyPageWHotelBeforeParentContent.csv
new file mode 100644 (file)
index 0000000..1e159c2
--- /dev/null
@@ -0,0 +1,47 @@
+pages
+,uid,pid,sorting,deleted,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,1,0,256,0,0,0,0,0,0,FunctionalTest
+,88,1,256,0,0,0,0,0,0,DataHandlerTest
+,89,88,256,0,0,0,0,0,0,Relations
+,90,88,512,0,0,0,0,0,0,Target
+,91,90,256,0,0,0,0,0,0,Relations
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
+,299,91,256,0,0,0,0,0,0,0,0,"Regular Element #2",10
+,301,91,128,0,0,0,0,0,0,0,0,"Regular Element #1","6,8"
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,91,256,0,0,0,0,0,0,0,0,"Hotel #1","9,11"
+,8,91,128,0,0,0,0,0,0,0,0,"Hotel #2",13
+,10,91,64,0,0,0,0,0,0,0,0,"Hotel #1",15
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,91,256,0,0,0,0,0,0,0,0,"Offer #1.1","14,16,18"
+,11,91,128,0,0,0,0,0,0,0,0,"Offer #1.2","20,22"
+,13,91,64,0,0,0,0,0,0,0,0,"Offer #2.1",24
+,15,91,32,0,0,0,0,0,0,0,0,"Offer #1.1",26
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,91,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,16,91,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,18,91,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,20,91,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,22,91,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,24,91,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,26,91,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
index fdf97d5..6a75b21 100644 (file)
@@ -2,20 +2,20 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,89,128,0,0,0,0,0,0,0,0,"Regular Element #2 (copy 1)",
+,299,89,128,0,0,0,0,0,0,0,0,"Regular Element #2 (copy 1)",6
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,89,64,0,0,0,0,0,0,0,0,"Hotel #1",9
+,6,89,32,0,0,0,0,0,0,0,0,"Hotel #1",9
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",14
+,9,89,16,0,0,0,0,0,0,0,0,"Offer #1.1",14
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
@@ -25,4 +25,4 @@ tx_irretutorial_1ncsv_price
 ,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
 ,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
 ,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
-,14,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,89,2,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 40d6ade..b1da16d 100644 (file)
@@ -2,15 +2,15 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,89,128,0,0,0,0,0,0,0,0,"Testing #1",
-,301,89,64,0,0,0,0,0,0,0,0,"Testing #1 (copy 1)",
+,299,89,128,0,0,0,0,0,0,0,0,"Testing #1",6
+,301,89,64,0,0,0,0,0,0,0,0,"Testing #1 (copy 1)",8
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,89,32,0,0,0,0,0,0,0,0,"Hotel #1",
-,8,89,32,0,0,0,1,-1,0,6,0,"Hotel #1",11
+,6,89,32,0,0,0,0,0,0,0,0,"Hotel #1",9
+,8,89,16,0,0,0,0,0,0,0,0,"Hotel #1",11
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
@@ -18,7 +18,7 @@ tx_irretutorial_1ncsv_offer
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
 ,9,89,16,0,0,0,0,0,0,0,0,"Offer #1",
-,11,89,16,0,0,0,1,-1,0,9,0,"Offer #1",
+,11,89,8,0,0,0,0,0,0,0,0,"Offer #1",
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 31362c4..c866929 100644 (file)
@@ -2,17 +2,17 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,89,128,0,0,0,0,0,0,0,0,"Testing #1",
-,301,89,1000000000,1,0,0,0,1,0,0,0,"Testing #1 (copy 1)",
+,299,89,128,0,0,0,0,0,0,0,0,"Testing #1",6
+,301,89,1000000000,1,0,0,0,1,0,0,0,"Testing #1 (copy 1)",8
 ,302,-1,1000000000,1,0,0,0,-1,0,301,0,"Testing #1 (copy 1)",8
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,89,32,0,0,0,0,0,0,0,0,"Hotel #1",
-,8,89,32,0,0,0,1,-1,0,6,0,"Hotel #1",11
-,9,-1,32,0,0,0,1,2,0,8,0,"Hotel #1",12
+,6,89,32,0,0,0,0,0,0,0,0,"Hotel #1",9
+,8,89,1000000000,1,0,0,0,1,0,0,0,"Hotel #1",11
+,9,-1,1000000000,1,0,0,0,-1,0,8,0,"Hotel #1",11
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
@@ -20,8 +20,8 @@ tx_irretutorial_1ncsv_offer
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
 ,9,89,16,0,0,0,0,0,0,0,0,"Offer #1",
-,11,89,16,0,0,0,1,-1,0,9,0,"Offer #1",
-,12,-1,16,0,0,0,1,2,0,11,0,"Offer #1",
+,11,89,1000000000,1,0,0,0,1,0,0,0,"Offer #1",
+,12,-1,1000000000,1,0,0,0,-1,0,11,0,"Offer #1",
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 06f74c9..b185e0c 100644 (file)
@@ -2,16 +2,15 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,89,128,0,0,0,0,0,0,0,0,"Testing #1",
-,301,89,192,0,1,299,0,0,0,0,0,"[Translate to Dansk:] Testing #1",
+,299,89,128,0,0,0,0,0,0,0,0,"Testing #1",6
+,301,89,192,0,1,299,0,0,0,0,0,"[Translate to Dansk:] Testing #1",8
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,89,32,0,0,0,0,0,0,0,0,"Hotel #1",
-,8,89,1000000000,1,1,7,0,1,0,0,0,"[Translate to Dansk:] Hotel #1",
-,9,-1,1000000000,1,1,7,0,-1,0,8,0,"[Translate to Dansk:] Hotel #1",11
+,6,89,32,0,0,0,0,0,0,0,0,"Hotel #1",9
+,8,89,48,0,1,6,0,0,0,0,0,"[Translate to Dansk:] Hotel #1",11
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
@@ -19,8 +18,7 @@ tx_irretutorial_1ncsv_offer
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
 ,9,89,16,0,0,0,0,0,0,0,0,"Offer #1",
-,11,89,1000000000,1,1,10,0,1,0,0,0,"[Translate to Dansk:] Offer #1",
-,12,-1,1000000000,1,1,10,0,-1,0,11,0,"[Translate to Dansk:] Offer #1",
+,11,89,24,0,1,9,0,0,0,0,0,"[Translate to Dansk:] Offer #1",
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent.csv
new file mode 100644 (file)
index 0000000..12d3178
--- /dev/null
@@ -0,0 +1,36 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
+,299,89,1000000000,1,0,0,0,1,0,0,0,"Testing #1",6
+,300,-1,1000000000,1,0,0,0,-1,0,299,0,"Testing #1",6
+,301,89,1000000000,1,1,299,0,1,0,0,0,"[Translate to Dansk:] Testing #1",8
+,302,-1,1000000000,1,1,299,0,-1,0,301,0,"[Translate to Dansk:] Testing #1",8
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,89,1000000000,1,0,0,0,1,0,0,0,"Hotel #1",9
+,7,-1,1000000000,1,0,0,0,-1,0,6,0,"Hotel #1",9
+,8,89,1000000000,1,1,6,0,1,0,0,0,"[Translate to Dansk:] Hotel #1",11
+,9,-1,1000000000,1,1,6,0,-1,0,8,0,"[Translate to Dansk:] Hotel #1",11
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,89,1000000000,1,0,0,0,1,0,0,0,"Offer #1",
+,10,-1,1000000000,1,0,0,0,-1,0,9,0,"Offer #1",
+,11,89,1000000000,1,1,9,0,1,0,0,0,"[Translate to Dansk:] Offer #1",
+,12,-1,1000000000,1,1,9,0,-1,0,11,0,"[Translate to Dansk:] Offer #1",
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 0d89750..980374e 100644 (file)
@@ -2,17 +2,17 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,89,128,0,0,0,0,0,0,0,0,"Testing #1",
-,301,89,1000000000,1,1,299,0,1,0,0,0,"[Translate to Dansk:] Testing #1",
+,299,89,128,0,0,0,0,0,0,0,0,"Testing #1",6
+,301,89,1000000000,1,1,299,0,1,0,0,0,"[Translate to Dansk:] Testing #1",8
 ,302,-1,1000000000,1,1,299,0,-1,0,301,0,"[Translate to Dansk:] Testing #1",8
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,89,32,0,0,0,0,0,0,0,0,"Hotel #1",
-,8,89,1000000000,1,1,7,0,1,0,0,0,"[Translate to Dansk:] Hotel #1",
-,9,-1,1000000000,1,1,7,0,-1,0,8,0,"[Translate to Dansk:] Hotel #1",11
+,6,89,32,0,0,0,0,0,0,0,0,"Hotel #1",9
+,8,89,1000000000,1,1,6,0,1,0,0,0,"[Translate to Dansk:] Hotel #1",11
+,9,-1,1000000000,1,1,6,0,-1,0,8,0,"[Translate to Dansk:] Hotel #1",11
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
@@ -20,8 +20,8 @@ tx_irretutorial_1ncsv_offer
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
 ,9,89,16,0,0,0,0,0,0,0,0,"Offer #1",
-,11,89,1000000000,1,1,10,0,1,0,0,0,"[Translate to Dansk:] Offer #1",
-,12,-1,1000000000,1,1,10,0,-1,0,11,0,"[Translate to Dansk:] Offer #1",
+,11,89,1000000000,1,1,9,0,1,0,0,0,"[Translate to Dansk:] Offer #1",
+,12,-1,1000000000,1,1,9,0,-1,0,11,0,"[Translate to Dansk:] Offer #1",
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 5982b53..c3a4322 100644 (file)
@@ -2,13 +2,13 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,89,128,0,0,0,0,0,0,0,0,"Testing #1",
+,299,89,128,0,0,0,0,0,0,0,0,"Testing #1",6
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,89,32,0,0,0,0,0,0,0,0,"Hotel #1",
+,6,89,32,0,0,0,0,0,0,0,0,"Hotel #1",9
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
index 7dedf11..efc5a11 100644 (file)
@@ -14,19 +14,19 @@ tx_irretutorial_1ncsv_hotel
 ,3,89,1000000000,1,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,1000000000,1,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,1000000000,1,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,1000000000,1,0,0,1,2,0,3,0,"Hotel #1","9,10"
-,7,-1,1000000000,1,0,0,1,2,0,4,0,"Hotel #2",11
-,8,-1,1000000000,1,0,0,1,2,0,5,0,"Hotel #1",12
+,6,-1,1000000000,1,0,0,1,2,0,3,0,"Hotel #1","5,6"
+,7,-1,1000000000,1,0,0,1,2,0,4,0,"Hotel #2",7
+,8,-1,1000000000,1,0,0,1,2,0,5,0,"Hotel #1",8
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,1000000000,1,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,1000000000,1,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,1000000000,1,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,1000000000,1,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,1000000000,1,0,0,1,2,0,5,0,"Offer #1.1","14,15,16"
-,10,-1,1000000000,1,0,0,1,2,0,6,0,"Offer #1.2","17,18"
-,11,-1,1000000000,1,0,0,1,2,0,7,0,"Offer #2.1",19
-,12,-1,1000000000,1,0,0,1,2,0,8,0,"Offer #1.1",20
+,9,-1,1000000000,1,0,0,1,2,0,5,0,"Offer #1.1","7,8,9"
+,10,-1,1000000000,1,0,0,1,2,0,6,0,"Offer #1.2","10,11"
+,11,-1,1000000000,1,0,0,1,2,0,7,0,"Offer #2.1",12
+,12,-1,1000000000,1,0,0,1,2,0,8,0,"Offer #1.1",13
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,1000000000,1,0,0,0,0,0,0,0,"Price #1.1.1"
index e31ac9f..4409201 100644 (file)
@@ -2,20 +2,20 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,1000000000,1,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,1000000000,1,0,0,0,0,0,298,0,"Regular Element #2",6
+,299,-1,1000000000,1,0,0,0,0,0,298,0,"Regular Element #2",5
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,1000000000,1,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,1000000000,1,0,0,0,0,0,5,0,"Hotel #1",9
+,6,-1,1000000000,1,0,0,0,0,0,5,0,"Hotel #1",8
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,1000000000,1,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,1000000000,1,0,0,0,0,0,8,0,"Offer #1.1",14
+,9,-1,1000000000,1,0,0,0,0,0,8,0,"Offer #1.1",13
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index b0c11f6..888a11b 100644 (file)
@@ -2,22 +2,20 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,89,768,0,1,298,0,0,0,0,0,"[Translate to Dansk:] Regular Element #2",
+,299,89,768,0,1,298,0,0,0,0,0,"[Translate to Dansk:] Regular Element #2",6
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,89,96,0,1,5,1,1,0,0,0,"[Translate to Dansk:] Hotel #1",
-,7,-1,96,0,1,5,1,-1,0,6,0,"[Translate to Dansk:] Hotel #1",9
+,6,89,96,0,1,5,0,0,0,0,0,"[Translate to Dansk:] Hotel #1",9
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,89,48,0,1,8,1,1,0,0,0,"[Translate to Dansk:] Offer #1.1",
-,10,-1,48,0,1,8,1,-1,0,9,0,"[Translate to Dansk:] Offer #1.1",14
+,9,89,48,0,1,8,0,0,0,0,0,"[Translate to Dansk:] Offer #1.1",14
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
@@ -27,5 +25,4 @@ tx_irretutorial_1ncsv_price
 ,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
 ,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
 ,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
-,14,89,6,0,1,13,1,1,0,0,0,"[Translate to Dansk:] Price #1.1.1"
-,15,-1,6,0,1,13,1,-1,0,14,0,"[Translate to Dansk:] Price #1.1.1"
+,14,89,6,0,1,13,0,0,0,0,0,"[Translate to Dansk:] Price #1.1.1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/modifyNDiscardNModifyParentWHotelChild.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/IRRE/CSV/Publish/DataSet/modifyNDiscardNModifyParentWHotelChild.csv
new file mode 100644 (file)
index 0000000..e150a1c
--- /dev/null
@@ -0,0 +1,38 @@
+tt_content
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
+,297,89,256,0,0,0,0,0,0,0,0,"Testing #2","3,4"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
+,299,-1,256,0,0,0,0,0,0,297,0,"Testing #1","3,4"
+,300,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","3,4"
+tx_irretutorial_1ncsv_hotel
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
+,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,89,128,0,0,0,0,0,0,0,0,"Testing #2",7
+,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
+,6,-1,256,0,0,0,0,0,0,3,0,"Hotel #1","5,6"
+,7,-1,128,0,0,0,0,0,0,4,0,"Testing #1",7
+,8,-1,128,0,0,0,0,0,0,4,0,"Hotel #2",7
+tx_irretutorial_1ncsv_offer
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
+,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
+,9,-1,256,0,0,0,0,0,0,5,0,"Offer #1.1","7,8,9"
+,10,-1,128,0,0,0,0,0,0,6,0,"Offer #1.2","10,11"
+,11,-1,64,0,0,0,0,0,0,7,0,"Offer #2.1",12
+tx_irretutorial_1ncsv_price
+,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
+,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,89,128,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,89,64,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,89,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,89,16,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,89,8,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,89,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,14,-1,256,0,0,0,0,0,0,7,0,"Price #1.1.1"
+,15,-1,128,0,0,0,0,0,0,8,0,"Price #1.1.2"
+,16,-1,64,0,0,0,0,0,0,9,0,"Price #1.1.3"
+,17,-1,32,0,0,0,0,0,0,10,0,"Price #1.2.1"
+,18,-1,16,0,0,0,0,0,0,11,0,"Price #1.2.2"
+,19,-1,8,0,0,0,0,0,0,12,0,"Price #2.1.1"
index 943901e..789989c 100644 (file)
@@ -7,14 +7,14 @@ tx_irretutorial_1ncsv_hotel
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Testing #1",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,128,0,0,0,0,0,0,4,0,"Hotel #2",9
+,6,-1,128,0,0,0,0,0,0,4,0,"Hotel #2",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,64,0,0,0,0,0,0,7,0,"Offer #2.1",14
+,9,-1,64,0,0,0,0,0,0,7,0,"Offer #2.1",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 93937e6..3966aee 100644 (file)
@@ -2,20 +2,20 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Testing #1",5
-,299,-1,512,0,0,0,0,0,0,298,0,"Regular Element #2",6
+,299,-1,512,0,0,0,0,0,0,298,0,"Regular Element #2",5
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,64,0,0,0,0,0,0,5,0,"Hotel #1",9
+,6,-1,64,0,0,0,0,0,0,5,0,"Hotel #1",8
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,32,0,0,0,0,0,0,8,0,"Offer #1.1",14
+,9,-1,32,0,0,0,0,0,0,8,0,"Offer #1.1",13
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 53c9e43..8aed302 100644 (file)
@@ -1,14 +1,14 @@
 tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
-,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,512,0,0,0,0,0,0,298,0,"Regular Element #2","6,8"
+,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2","5,7"
+,299,-1,512,0,0,0,0,0,0,298,0,"Regular Element #2",5
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,64,0,0,0,0,0,0,5,0,"Hotel #1",9
+,6,-1,64,0,0,0,0,0,0,5,0,"Hotel #1",8
 ,7,89,32,0,0,0,0,0,0,0,0,"Hotel #2",
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
@@ -16,7 +16,7 @@ tx_irretutorial_1ncsv_offer
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,32,0,0,0,0,0,0,8,0,"Offer #1.1",14
+,9,-1,32,0,0,0,0,0,0,8,0,"Offer #1.1",13
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index f51ce4a..c8bde47 100644 (file)
@@ -1,24 +1,24 @@
 tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
-,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","4,3"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","7,6"
+,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","3,4"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,256,0,0,0,0,0,0,3,0,"Hotel #1","9,10"
-,7,-1,128,0,0,0,0,0,0,4,0,"Hotel #2",11
+,6,-1,256,0,0,0,0,0,0,3,0,"Hotel #1","5,6"
+,7,-1,128,0,0,0,0,0,0,4,0,"Hotel #2",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,256,0,0,0,0,0,0,5,0,"Offer #1.1","14,15,16"
-,10,-1,128,0,0,0,0,0,0,6,0,"Offer #1.2","17,18"
-,11,-1,64,0,0,0,0,0,0,7,0,"Offer #2.1",19
+,9,-1,256,0,0,0,0,0,0,5,0,"Offer #1.1","7,8,9"
+,10,-1,128,0,0,0,0,0,0,6,0,"Offer #1.2","10,11"
+,11,-1,64,0,0,0,0,0,0,7,0,"Offer #2.1",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index b9ed0db..4037f4f 100644 (file)
@@ -1,24 +1,24 @@
 tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
-,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
+,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1",3
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1",6
+,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","3,4"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,256,0,0,0,0,0,0,3,0,"Hotel #1","9,10"
-,7,-1,128,0,0,0,1,2,0,4,0,"Hotel #2",11
+,6,-1,256,0,0,0,0,0,0,3,0,"Hotel #1","5,6"
+,7,-1,128,0,0,0,1,2,0,4,0,"Hotel #2",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,256,0,0,0,0,0,0,5,0,"Offer #1.1","14,15,16"
-,10,-1,128,0,0,0,0,0,0,6,0,"Offer #1.2","17,18"
-,11,-1,64,0,0,0,1,2,0,7,0,"Offer #2.1",19
+,9,-1,256,0,0,0,0,0,0,5,0,"Offer #1.1","7,8,9"
+,10,-1,128,0,0,0,0,0,0,6,0,"Offer #1.2","10,11"
+,11,-1,64,0,0,0,1,2,0,7,0,"Offer #2.1",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index e5fc131..aa09d9f 100644 (file)
@@ -2,23 +2,23 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","6,7"
+,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","3,4"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Testing #1",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,256,0,0,0,0,0,0,3,0,"Hotel #1","9,10"
-,7,-1,128,0,0,0,0,0,0,4,0,"Hotel #2",11
+,6,-1,256,0,0,0,0,0,0,3,0,"Hotel #1","5,6"
+,7,-1,128,0,0,0,0,0,0,4,0,"Hotel #2",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,256,0,0,0,0,0,0,5,0,"Offer #1.1","14,15,16"
-,10,-1,128,0,0,0,0,0,0,6,0,"Offer #1.2","17,18"
-,11,-1,64,0,0,0,0,0,0,7,0,"Offer #2.1",19
+,9,-1,256,0,0,0,0,0,0,5,0,"Offer #1.1","7,8,9"
+,10,-1,128,0,0,0,0,0,0,6,0,"Offer #1.2","10,11"
+,11,-1,64,0,0,0,0,0,0,7,0,"Offer #2.1",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 0c80944..f6a2a6f 100644 (file)
@@ -2,23 +2,23 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","6,7"
+,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","3,4"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","9,10"
-,7,-1,128,0,0,0,0,0,0,4,0,"Testing #1",11
+,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","5,6"
+,7,-1,128,0,0,0,0,0,0,4,0,"Testing #1",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","14,15,16"
-,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","17,18"
-,11,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",19
+,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","7,8,9"
+,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","10,11"
+,11,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index e4d41f6..1bfce92 100644 (file)
@@ -2,23 +2,23 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,89,512,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","6,7"
+,299,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","3,4"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,89,64,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","9,10"
-,7,-1,128,0,0,0,1,0,0,4,0,"Testing #1",11
+,6,-1,256,0,0,0,1,0,0,3,0,"Hotel #1","5,6"
+,7,-1,128,0,0,0,1,0,0,4,0,"Testing #1",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,89,32,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","14,15,16"
-,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","17,18"
-,11,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",19
+,9,-1,256,0,0,0,1,0,0,5,0,"Offer #1.1","7,8,9"
+,10,-1,128,0,0,0,1,0,0,6,0,"Offer #1.2","10,11"
+,11,-1,64,0,0,0,1,0,0,7,0,"Offer #2.1",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 812ca72..249595e 100644 (file)
@@ -2,20 +2,20 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,89,256,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,90,256,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,512,0,0,0,0,0,0,298,0,"Regular Element #2",6
+,299,-1,512,0,0,0,0,0,0,298,0,"Regular Element #2",5
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
 ,3,89,256,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
 ,4,89,128,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,90,256,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,64,0,0,0,0,0,0,5,0,"Hotel #1",9
+,6,-1,64,0,0,0,0,0,0,5,0,"Hotel #1",8
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
 ,5,89,256,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
 ,6,89,128,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
 ,7,89,64,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,90,256,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,32,0,0,0,0,0,0,8,0,"Offer #1.1",14
+,9,-1,32,0,0,0,0,0,0,8,0,"Offer #1.1",13
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
 ,7,89,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
index 00b63e8..c021f6f 100644 (file)
@@ -2,35 +2,35 @@ tt_content
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,header,tx_irretutorial_1ncsv_hotels
 ,297,90,512,0,0,0,0,0,0,0,0,"Regular Element #1","3,4"
 ,298,90,256,0,0,0,0,0,0,0,0,"Regular Element #2",5
-,299,-1,512,0,0,0,0,0,0,298,0,"Regular Element #2",6
-,301,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","8,9"
+,299,-1,512,0,0,0,0,0,0,298,0,"Regular Element #2",5
+,301,-1,256,0,0,0,0,0,0,297,0,"Regular Element #1","3,4"
 tx_irretutorial_1ncsv_hotel
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,offers
-,3,90,64,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
-,4,90,128,0,0,0,0,0,0,0,0,"Hotel #2",7
+,3,90,32,0,0,0,0,0,0,0,0,"Hotel #1","5,6"
+,4,90,64,0,0,0,0,0,0,0,0,"Hotel #2",7
 ,5,90,256,0,0,0,0,0,0,0,0,"Hotel #1",8
-,6,-1,64,0,0,0,0,0,0,5,0,"Hotel #1",9
-,8,-1,256,0,0,0,0,0,0,3,0,"Hotel #1","11,12"
-,9,-1,128,0,0,0,0,0,0,4,0,"Hotel #2",13
+,6,-1,64,0,0,0,0,0,0,5,0,"Hotel #1",8
+,8,-1,256,0,0,0,0,0,0,3,0,"Hotel #1","5,6"
+,9,-1,128,0,0,0,0,0,0,4,0,"Hotel #2",7
 tx_irretutorial_1ncsv_offer
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title,prices
-,5,90,32,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
-,6,90,64,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
-,7,90,128,0,0,0,0,0,0,0,0,"Offer #2.1",12
+,5,90,8,0,0,0,0,0,0,0,0,"Offer #1.1","7,8,9"
+,6,90,16,0,0,0,0,0,0,0,0,"Offer #1.2","10,11"
+,7,90,32,0,0,0,0,0,0,0,0,"Offer #2.1",12
 ,8,90,256,0,0,0,0,0,0,0,0,"Offer #1.1",13
-,9,-1,32,0,0,0,0,0,0,8,0,"Offer #1.1",14
-,11,-1,256,0,0,0,0,0,0,5,0,"Offer #1.1","16,17,18"
-,12,-1,128,0,0,0,0,0,0,6,0,"Offer #1.2","19,20"
-,13,-1,64,0,0,0,0,0,0,7,0,"Offer #2.1",21
+,9,-1,32,0,0,0,0,0,0,8,0,"Offer #1.1",13
+,11,-1,256,0,0,0,0,0,0,5,0,"Offer #1.1","7,8,9"
+,12,-1,128,0,0,0,0,0,0,6,0,"Offer #1.2","10,11"
+,13,-1,64,0,0,0,0,0,0,7,0,"Offer #2.1",12
 tx_irretutorial_1ncsv_price
 ,uid,pid,sorting,deleted,sys_language_uid,l18n_parent,t3ver_wsid,t3ver_state,t3ver_stage,t3ver_oid,t3ver_move_id,title
-,7,90,4,0,0,0,0,0,0,0,0,"Price #1.1.1"
-,8,90,8,0,0,0,0,0,0,0,0,"Price #1.1.2"
-,9,90,16,0,0,0,0,0,0,0,0,"Price #1.1.3"
-,10,90,32,0,0,0,0,0,0,0,0,"Price #1.2.1"
-,11,90,64,0,0,0,0,0,0,0,0,"Price #1.2.2"
-,12,90,128,0,0,0,0,0,0,0,0,"Price #2.1.1"
-,13,90,256,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,7,90,128,0,0,0,0,0,0,0,0,"Price #1.1.1"
+,8,90,256,0,0,0,0,0,0,0,0,"Price #1.1.2"
+,9,90,512,0,0,0,0,0,0,0,0,"Price #1.1.3"
+,10,90,768,0,0,0,0,0,0,0,0,"Price #1.2.1"
+,11,90,1024,0,0,0,0,0,0,0,0,"Price #1.2.2"
+,12,90,1280,0,0,0,0,0,0,0,0,"Price #2.1.1"
+,13,90,2048,0,0,0,0,0,0,0,0,"Price #1.1.1"
 ,14,-1,4,0,0,0,0,0,0,13,0,"Price #1.1.1"
 ,16,-1,256,0,0,0,0,0,0,7,0,"Price #1.1.1"
 ,17,-1,128,0,0,0,0,0,0,8,0,"Price #1.1.2"
index e0c3968..8fe3a42 100644 (file)
@@ -68,18 +68,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1');
-
-               // @todo Cannot direct select workspace version due to frontend SQL query
-               // SELECT * FROM tx_irretutorial_1ncsv_hotel
-               // WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
-               // AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
-               // AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1')
+               );
        }
 
        /**
@@ -113,7 +105,6 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         * @see DataSet/Assertion/copyParentContentRecord.csv
         */
        public function copyParentContent() {
-               $this->markTestSkipped('Skipped due to core bugs...');
                parent::copyParentContent();
                $this->actionService->publishWorkspace(self::VALUE_WorkspaceId);
                $this->assertAssertionDataSet('copyParentContent');
@@ -130,7 +121,6 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         * @see DataSet/Assertion/localizeParentContentRecord.csv
         */
        public function localizeParentContent() {
-               $this->markTestSkipped('Skipped due to core bugs...');
                parent::localizeParentContent();
                $this->actionService->publishWorkspace(self::VALUE_WorkspaceId);
                $this->assertAssertionDataSet('localizeParentContent');
@@ -152,22 +142,14 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
                $this->assertAssertionDataSet('changeParentContentSorting');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0)->getResponseContent();
-
-               // @todo Cannot direct select workspace version due to frontend SQL query
-               // SELECT * FROM tx_irretutorial_1ncsv_hotel
-               // WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
-               // AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
-               // AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
-                       );
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+               );
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1')
+               );
        }
 
        /**
@@ -181,14 +163,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageIdTarget, 0)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Regular Element #2');
-
-               // @todo Workspace child records gets lost due to core bug
-               /*
                $this->assertResponseContentStructureHasRecords(
                        $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
                        self::TABLE_Hotel, 'title', array('Hotel #1')
                );
-               */
        }
 
        /**
@@ -202,22 +180,14 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageIdTarget, 0)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', array('Regular Element #2', 'Regular Element #1'));
-
-               // @todo Cannot direct select workspace version due to frontend SQL query
-               // SELECT * FROM tx_irretutorial_1ncsv_hotel
-               // WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
-               // AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
-               // AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
-                       );
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
+               );
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdLast, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1')
+               );
        }
 
        /**
@@ -259,7 +229,6 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         * @see DataSet/Assertion/copyPageRecord.csv
         */
        public function copyPage() {
-               $this->markTestSkipped('Skipped due to core bugs...');
                parent::copyPage();
                $this->actionService->publishWorkspace(self::VALUE_WorkspaceId);
                $this->assertAssertionDataSet('copyPage');
@@ -269,6 +238,19 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
        }
 
        /**
+        * @test
+        * @see DataSet/Assertion/copyPageWHotelBeforeParentContent.csv
+        */
+       public function copyPageWithHotelBeforeParentContent() {
+               parent::copyPageWithHotelBeforeParentContent();
+               $this->actionService->publishWorkspace(self::VALUE_WorkspaceId);
+               $this->assertAssertionDataSet('copyPageWHotelBeforeParentContent');
+
+               $responseContent = $this->getFrontendResponse($this->recordIds['newPageId'], 0)->getResponseContent();
+               $this->assertResponseContentHasRecords($responseContent, self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2', 'Hotel #1'));
+       }
+
+       /**
         * IRRE Child Records
         */
 
@@ -283,14 +265,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1');
-
-               // @todo Shadow fields are not correct on the new placeholder
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . $this->recordIds['newContentId'], self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', 'Hotel #1'
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . $this->recordIds['newContentId'], self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', 'Hotel #1'
+               );
        }
 
        /**
@@ -298,30 +276,24 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         * @see DataSet/Assertion/createAndCopyParentContentRecordWithHotelAndOfferChildRecords.csv
         */
        public function createAndCopyParentContentWithHotelAndOfferChildren() {
-               $this->markTestSkipped('Skipped due to core bugs...');
                parent::createAndCopyParentContentWithHotelAndOfferChildren();
-               // @todo Copying the new child records is broken in the Core
                $this->actionService->publishWorkspace(self::VALUE_WorkspaceId);
                $this->assertAssertionDataSet('createNCopyParentContentNHotelNOfferChildren');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Testing #1 (copy 1)');
-
-               // @todo Shadow fields are not correct on the new placeholder
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . $this->recordIds['newContentId'], self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', 'Hotel #1'
-                       );
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . $this->recordIds['copiedContentId'], self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', 'Hotel #1'
-                       );
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Hotel . ':' . $this->recordIds['copiedHotelId'], self::FIELD_HotelOffer,
-                               self::TABLE_Offer, 'title', 'Offer #1'
-                       );
-                */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . $this->recordIds['newContentId'], self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', 'Hotel #1'
+               );
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . $this->recordIds['copiedContentId'], self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', 'Hotel #1'
+               );
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Hotel . ':' . $this->recordIds['copiedHotelId'], self::FIELD_HotelOffer,
+                       self::TABLE_Offer, 'title', 'Offer #1'
+               );
        }
 
        /**
@@ -330,7 +302,6 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         */
        public function createAndCopyParentContentWithHotelAndOfferChildrenAndDiscardCopiedParent() {
                parent::createAndCopyParentContentWithHotelAndOfferChildrenAndDiscardCopiedParent();
-               // @todo Copying the new child records is broken in the Core
                $this->actionService->publishWorkspace(self::VALUE_WorkspaceId);
                $this->assertAssertionDataSet('createNCopyParentContentNHotelNOfferChildrenNDiscardCopiedParent');
 
@@ -343,26 +314,33 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         * @see DataSet/Assertion/createAndLocalizeParentContentRecordWithHotelAndOfferChildRecords.csv
         */
        public function createAndLocalizeParentContentWithHotelAndOfferChildren() {
-               $this->markTestSkipped('Skipped due to core bugs...');
                parent::createAndLocalizeParentContentWithHotelAndOfferChildren();
-               // @todo Localizing the new child records is broken in the Core
                $this->actionService->publishWorkspace(self::VALUE_WorkspaceId);
                $this->assertAssertionDataSet('createNLocalizeParentContentNHotelNOfferChildren');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, self::VALUE_LanguageId)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', '[Translate to Dansk:] Testing #1');
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . $this->recordIds['newContentId'], self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', '[Translate to Dansk:] Hotel #1'
+               );
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Hotel . ':' . $this->recordIds['localizedHotelId'], self::FIELD_HotelOffer,
+                       self::TABLE_Offer, 'title', '[Translate to Dansk:] Offer #1'
+               );
+       }
 
-               // @todo Does not work since children don't point to live-default record
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . $this->recordIds['localizedContentId'], self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', '[Translate to Dansk:] Hotel #1'
-                       );
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Hotel . ':' . $this->recordIds['localizedHotelId'], self::FIELD_HotelOffer,
-                               self::TABLE_Offer, 'title', '[Translate to Dansk:] Offer #1'
-                       );
-               */
+       /**
+        * @test
+        * @see DataSet/Assertion/createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent.csv
+        */
+       public function createAndLocalizeParentContentWithHotelAndOfferChildrenAndDiscardCreatedParent() {
+               parent::createAndLocalizeParentContentWithHotelAndOfferChildrenAndDiscardCreatedParent();
+               $this->actionService->publishWorkspace(self::VALUE_WorkspaceId);
+               $this->assertAssertionDataSet('createNLocalizeParentContentNHotelNOfferChildrenNDiscardCreatedParent');
+
+               $responseContent = $this->getFrontendResponse(self::VALUE_PageId, self::VALUE_LanguageId)->getResponseContent();
+               $this->assertResponseContentDoesNotHaveRecords($responseContent, self::TABLE_Content, 'header', array('Testing #1', '[Translate to Dansk:] Testing #1'));
        }
 
        /**
@@ -371,7 +349,6 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
         */
        public function createAndLocalizeParentContentWithHotelAndOfferChildrenAndDiscardLocalizedParent() {
                parent::createAndLocalizeParentContentWithHotelAndOfferChildrenAndDiscardLocalizedParent();
-               // @todo Localizing the new child records is broken in the Core
                $this->actionService->publishWorkspace(self::VALUE_WorkspaceId);
                $this->assertAssertionDataSet('createNLocalizeParentContentNHotelNOfferChildrenNDiscardLocalizedParent');
 
@@ -405,18 +382,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
                $this->assertAssertionDataSet('modifyParentNChangeHotelChildrenSorting');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0)->getResponseContent();
-
-               // @todo Cannot direct select workspace version due to frontend SQL query
-               // SELECT * FROM tx_irretutorial_1ncsv_hotel
-               // WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
-               // AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
-               // AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #2', 'Hotel #1')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #2', 'Hotel #1')
+               );
        }
 
        /**
@@ -429,18 +398,10 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
                $this->assertAssertionDataSet('modifyParentNHotelChild');
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0)->getResponseContent();
-
-               // @todo Cannot direct select workspace version due to frontend SQL query
-               // SELECT * FROM tx_irretutorial_1ncsv_hotel
-               // WHERE tx_irretutorial_1ncsv_hotel.uid=6 AND tx_irretutorial_1ncsv_hotel.pid IN (89)
-               // AND tx_irretutorial_1ncsv_hotel.deleted=0 AND (tx_irretutorial_1ncsv_hotel.t3ver_wsid=0 OR tx_irretutorial_1ncsv_hotel.t3ver_wsid=1)
-               // AND tx_irretutorial_1ncsv_hotel.pid<>-1 ORDER BY sorting
-               /*
-                       $this->assertResponseContentStructureHasRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
-                               self::TABLE_Hotel, 'title', array('Hotel #1', 'Testing #1')
-                       );
-               */
+               $this->assertResponseContentStructureHasRecords(
+                       $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
+                       self::TABLE_Hotel, 'title', array('Hotel #1', 'Testing #1')
+               );
        }
 
        /**
@@ -454,18 +415,15 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\IRR
 
                $responseContent = $this->getFrontendResponse(self::VALUE_PageId, 0)->getResponseContent();
                $this->assertResponseContentHasRecords($responseContent, self::TABLE_Content, 'header', 'Regular Element #1');
+               // Discarding the parent shall not discard the child records
                $this->assertResponseContentStructureHasRecords(
                        $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,
                        self::TABLE_Hotel, 'title', array('Hotel #1', 'Testing #1')
-                       // @todo Discarding the parent record should discard the child records as well
-                       // self::TABLE_Hotel, 'title', array('Hotel #1', 'Hotel #2')
                );
-               /*
-                       $this->assertResponseContentStructureDoesNotHaveRecords(
-                               $responseContent, self::TABLE_Content . ':' . self::VALUE_ContentIdFirst, self::FIELD_ContentHotel,