diff --git a/Classes/Controller/Update/DataStructureUpdateHandler.php b/Classes/Controller/Update/DataStructureUpdateHandler.php index a6fcdc7ad..424aa4f2e 100644 --- a/Classes/Controller/Update/DataStructureUpdateHandler.php +++ b/Classes/Controller/Update/DataStructureUpdateHandler.php @@ -18,6 +18,7 @@ use TYPO3\CMS\Core\Utility\StringUtility; use Ppi\TemplaVoilaPlus\Domain\Repository\DataStructureRepository; +use Ppi\TemplaVoilaPlus\Domain\Repository\TemplateRepository; /** * Handles Updates in DataStructure via Callbacks @@ -40,28 +41,60 @@ public function updateAllDs(array $rootCallbacks, array $elementCallbacks) return $count; } + public function updateAllToLocals(array $rootCallbacks, array $elementCallbacks) + { + $count = 0; + + $tsRepo = GeneralUtility::makeInstance(TemplateRepository::class); + foreach ($tsRepo->getAll() as $to) { + if ($this->updateTo($to, $rootCallbacks, $elementCallbacks)) { + $count++; + } + } + + return $count; + } + public function updateDs( \Ppi\TemplaVoilaPlus\Domain\Model\AbstractDataStructure $ds, array $rootCallbacks, array $elementCallbacks ) { - $changed = false; $data = $ds->getDataprotArray(); - $this->lastKey = $ds->getKey(); - foreach ($rootCallbacks as $callback) { - if (is_callable($callback)) { - $changed = $callback($data) || $changed; - } - } + $changed = $this->processUpdate($data, $rootCallbacks, $elementCallbacks); - foreach($data['ROOT']['el'] as &$element) { - $changed = $this->fixPerElement($element, $elementCallbacks) || $changed; + if ($changed) { + $this->saveChange( + $ds->getKey(), + 'tx_templavoilaplus_datastructure', + 'dataprot', + GeneralUtility::array2xml_cs( + $data, + 'T3DataStructure', + ['useCDATA' => 1] + ), + $ds->isFilebased() + ); + return true; } + return false; + } + + public function updateTo( + \Ppi\TemplaVoilaPlus\Domain\Model\Template $to, + array $rootCallbacks, + array $elementCallbacks + ) { + $data = $to->getLocalDataprotArray(true); + + $changed = $this->processUpdate($data, $rootCallbacks, $elementCallbacks); if ($changed) { $this->saveChange( - $ds, + $to->getKey(), + 'tx_templavoilaplus_tmplobj', + 'localprocessing', GeneralUtility::array2xml_cs( $data, 'T3DataStructure', @@ -73,20 +106,45 @@ public function updateDs( return false; } - protected function saveChange($ds, $dataProtXML) + + public function processUpdate( + array &$data, + array $rootCallbacks, + array $elementCallbacks + ) { + $changed = false; + + if (empty($data)) { + return false; + } + + foreach ($rootCallbacks as $callback) { + if (is_callable($callback)) { + $changed = $callback($data) || $changed; + } + } + + foreach($data['ROOT']['el'] as &$element) { + $changed = $this->fixPerElement($element, $elementCallbacks) || $changed; + } + + return $changed; + } + + protected function saveChange($key, $table, $field, $dataProtXML, $filebased = false) { - if ($ds->isFilebased()) { - $path = PATH_site . $ds->getKey(); + if ($filebased) { + $path = PATH_site . $key; GeneralUtility::writeFile($path, $dataProtXML); } else { $tce = GeneralUtility::makeInstance(\TYPO3\CMS\Core\DataHandling\DataHandler::class); $tce->stripslashes_values = 0; $dataArr = []; - $dataArr['tx_templavoilaplus_datastructure'][$ds->getKey()]['dataprot'] = $dataProtXML; + $dataArr[$table][$key][$field] = $dataProtXML; // process data - $tce->start($dataArr, array()); + $tce->start($dataArr, []); $tce->process_datamap(); } } diff --git a/Classes/Controller/Update/OldTemplavoilaUpdateController.php b/Classes/Controller/Update/OldTemplavoilaUpdateController.php index 670e688a9..0a772816e 100644 --- a/Classes/Controller/Update/OldTemplavoilaUpdateController.php +++ b/Classes/Controller/Update/OldTemplavoilaUpdateController.php @@ -95,6 +95,9 @@ protected function stepFinal() if (($migratedDsData = $this->migrateDataStructureData()) === false) { $this->errors[] = 'Error while migrate data of data structures.'; } + if (($migratedToData = $this->migrateTemplateObjectLocalProcessing()) === false) { + $this->errors[] = 'Error while migrate local processing data of template objects.'; + } if (($migratedUploadFiles = $this->migrateFiles()) === false) { $this->errors[] = 'Error while copy files from uploads/tx_templavoila to uploads/tx_templavoilaplus.'; } @@ -112,6 +115,7 @@ protected function stepFinal() 'migrateGroupTableModify' => $migrateGroupTableModify, 'migrateGroupNonExcludeFields' => $migrateGroupNonExcludeFields, 'migratedDsData' => $migratedDsData, + 'migratedToData' => $migratedToData, 'migratedUploadFiles' => $migratedUploadFiles, 'errors' => $this->errors, ]); @@ -372,6 +376,21 @@ private function migrateDataStructureData() ); } + // Convert DS + // Convert DS + private function migrateTemplateObjectLocalProcessing() + { + $handler = GeneralUtility::makeInstance(DataStructureUpdateHandler::class); + return $handler->updateAllToLocals( + [ + [$this, 'migrateRootData'], + ], + [ + [$this, 'migrateElementData'], + ] + ); + } + public function migrateRootData(&$data) { if (isset($data['ROOT']['tx_templavoila'])) { diff --git a/Classes/Domain/Model/Template.php b/Classes/Domain/Model/Template.php index a0bfa8b74..71e19b869 100644 --- a/Classes/Domain/Model/Template.php +++ b/Classes/Domain/Model/Template.php @@ -378,7 +378,7 @@ public function getLocalDataprotArray($skipDsDataprot = false) if (!$skipDsDataprot) { $dataprot = $this->getDatastructure()->getDataprotArray(); } else { - $dataprot = array(); + $dataprot = []; } $toDataprot = GeneralUtility::xml2array($this->row['localprocessing']); diff --git a/Classes/Domain/Repository/TemplateRepository.php b/Classes/Domain/Repository/TemplateRepository.php index d11b60610..a30e33ec3 100644 --- a/Classes/Domain/Repository/TemplateRepository.php +++ b/Classes/Domain/Repository/TemplateRepository.php @@ -115,7 +115,7 @@ public function getTemplatesByParentTemplate(\Ppi\TemplaVoilaPlus\Domain\Model\T } /** - * Retrieve a collection (array) of tx_templavoilaplus_datastructure objects + * Retrieve a collection (array) of tx_templavoilaplus_tmplobj objects * * @param integer $storagePid * @@ -141,7 +141,7 @@ public function getAll($storagePid = 0) } /** - * Sorts datastructure alphabetically + * Sorts templates alphabetically * * @param \Ppi\TemplaVoilaPlus\Domain\Model\Template $obj1 * @param \Ppi\TemplaVoilaPlus\Domain\Model\Template $obj2 diff --git a/Resources/Private/Templates/Update/OldTemplavoilaStepFinal.html b/Resources/Private/Templates/Update/OldTemplavoilaStepFinal.html index d12228e7a..36c709366 100644 --- a/Resources/Private/Templates/Update/OldTemplavoilaStepFinal.html +++ b/Resources/Private/Templates/Update/OldTemplavoilaStepFinal.html @@ -4,7 +4,7 @@ .t3js-module-body h1:first-child {display: none;} -

TemplaVoilà Plus! Migration from old TeamplaVoilà 1.9/2.0

+

TemplaVoilà Plus! Migration from old TeamplaVoilà 1.8/1.9/2.0

Migration done.

Migrated Configuration

@@ -20,6 +20,7 @@

TemplaVoilà Plus! Migration from old TeamplaVoilà 1.9/2.0

Migrated group table modify: {migrateGroupTableModify}

Migrated group non exclude fields: {migrateGroupNonExcludeFields}

Migrated Data Structures data: {migratedDsData}

+

Migrated Template Objects local processing: {migratedToData}

Migrated Upload Files: {migratedUploadFiles}

diff --git a/Resources/Private/Templates/Update/OldTemplavoilaStepStart.html b/Resources/Private/Templates/Update/OldTemplavoilaStepStart.html index 6c2d873bc..982d65cdb 100644 --- a/Resources/Private/Templates/Update/OldTemplavoilaStepStart.html +++ b/Resources/Private/Templates/Update/OldTemplavoilaStepStart.html @@ -4,7 +4,7 @@ .t3js-module-body h1:first-child {display: none;} -

TemplaVoilà Plus! Update from old TeamplaVoilà 1.9/2.0

+

TemplaVoilà Plus! Update from old TeamplaVoilà 1.8/1.9/2.0

Please backup your database/files before running any of the update scripts!
This will remove data you already did with this new TemplaVoilà Plus 7.x Extension. @@ -18,7 +18,7 @@

TemplaVoilà Plus! Update from old TeamplaVoilà 1.9/2.0

-

Migrate from TemplaVoilà 1.9/2.0 to TemplaVoilà Plus 7.x?

+

Migrate from TemplaVoilà 1.8/1.9/2.0 to TemplaVoilà Plus 7.x?

We will migrate from old TeamplaVoilà {old.ds} / {old.to} Data Structures/Template Objects (in database) over the already existing {new.ds} / {new.to} Data Structures/Template Objects which are in new TemplaVoilà Plus 7.x (in database).

@@ -28,7 +28,7 @@

Migrate from TemplaVoilà 1.9/2.0 to TemplaVoilà Plus 7.x?

This will remove data you already did with this new TemplaVoilà Plus 7.x Extension.

diff --git a/Resources/Private/Templates/Update/Switch.html b/Resources/Private/Templates/Update/Switch.html index 21dbd97bf..ff3769512 100644 --- a/Resources/Private/Templates/Update/Switch.html +++ b/Resources/Private/Templates/Update/Switch.html @@ -8,17 +8,17 @@

TemplaVoilà Plus! Update Script Selection

Please backup your data before running any of the update scripts!

Please select an update script

- + - +