From 7271ae78308b122e9d6f35d600a1335100a8b574 Mon Sep 17 00:00:00 2001 From: Chetan Thapliyal Date: Mon, 13 Jul 2015 15:02:16 +0200 Subject: [PATCH 1/2] [FEATURE] Migrate meta-data for localized DAM records The existing meta-data migration service does not migrate data for localized DAM records. This patch enables this feature. --- Classes/Service/MigrateMetadataService.php | 36 ++++++++++++++++++++-- Classes/Service/MigrateService.php | 1 + 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/Classes/Service/MigrateMetadataService.php b/Classes/Service/MigrateMetadataService.php index a75f73e..1828992 100644 --- a/Classes/Service/MigrateMetadataService.php +++ b/Classes/Service/MigrateMetadataService.php @@ -47,6 +47,7 @@ class MigrateMetadataService extends AbstractService { 'hpixels' => 'width', 'title' => 'title', 'vpixels' => 'height', + 'sys_language_uid' => 'sys_language_uid', ); /** @@ -136,11 +137,18 @@ public function execute() { $this->isInstalledMedia = ExtensionManagementUtility::isLoaded('media'); while ($record = $this->database->sql_fetch_assoc($res)) { + $fileMetaData = $this->createArrayForUpdateSysFileMetadataRecord($record); $this->database->exec_UPDATEquery( 'sys_file_metadata', - 'uid = ' . $record['metadata_uid'], - $this->createArrayForUpdateSysFileMetadataRecord($record) + 'uid = ' . $record['metadata_uid'] . ' AND sys_language_uid = ' . $record['sys_language_uid'], + $fileMetaData ); + // if no SQL error and still no record has been updated, then it means that + // the record does not exist and must be created e.g. localized DAM record. + if (($this->database->sql_error() == '') && $this->database->sql_affected_rows() == 0) { + $this->updateArrayForInsertSysFileRecord($fileMetaData, $record); + $this->database->exec_INSERTquery('sys_file_metadata', $fileMetaData); + } $this->database->exec_UPDATEquery( 'sys_file', @@ -165,7 +173,7 @@ protected function execSelectMigratedSysFilesQuery() { return $this->database->exec_SELECTquery( 'DISTINCT m.uid AS metadata_uid, f.uid as file_uid, f._migrateddamuid AS dam_uid, d.*', 'sys_file f, sys_file_metadata m, tx_dam d', - 'm.file=f.uid AND f._migrateddamuid=d.uid AND f._migrateddamuid > 0' + 'm.file=f.uid AND ((f._migrateddamuid = d.uid OR f._migrateddamuid = d.l18n_parent)) AND f._migrateddamuid > 0' ); } @@ -191,6 +199,8 @@ protected function createArrayForUpdateSysFileMetadataRecord(array $damRecord) { } } + $updateData['tstamp'] = $_SERVER['REQUEST_TIME']; + return $updateData; } @@ -215,4 +225,24 @@ protected function createArrayForUpdateSysFileRecord(array $damRecord) { return $updateData; } + + /** + * Update provided array with necessary fields required to create a new `sys_file_metadata` record. + * + * @param array $fileMetaData File meta data. + * @param array $damRecord DAM record file with UIDs for corresponding + * `sys_file` and `sys_file_metadata` records. + * + * @return void + */ + protected function updateArrayForInsertSysFileRecord(array &$fileMetaData, array $damRecord) { + $fileMetaData['file'] = $damRecord['file_uid']; + $fileMetaData['categories'] = 0; + $fileMetaData['l10n_parent'] = (intval($damRecord['sys_language_uid']) > 0) ? $damRecord['metadata_uid'] : 0; + + if ($this->isInstalledFileMetadata) { + $fileMetaData['note'] = $fileMetaData['note'] ? $fileMetaData['note'] : ''; + $fileMetaData['caption'] = $fileMetaData['caption'] ? $fileMetaData['caption'] : ''; + } + } } diff --git a/Classes/Service/MigrateService.php b/Classes/Service/MigrateService.php index 8d193c9..b790880 100644 --- a/Classes/Service/MigrateService.php +++ b/Classes/Service/MigrateService.php @@ -58,6 +58,7 @@ class MigrateService extends AbstractService { 'description' => 'description', 'alt_text' => 'alternative', 'categories' => 'categories', + 'sys_language_uid' => 'sys_language_uid', ); /** From 0cddf492f4d4e285293874663f1d8282dff4cec4 Mon Sep 17 00:00:00 2001 From: Chetan Thapliyal Date: Mon, 14 Sep 2015 12:36:26 +0200 Subject: [PATCH 2/2] [BUGFIX] Ensure correct meta data is migrated to `sys_file_reference` table --- Classes/Service/MigrateRelationsService.php | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Classes/Service/MigrateRelationsService.php b/Classes/Service/MigrateRelationsService.php index 2f8cf09..e194711 100644 --- a/Classes/Service/MigrateRelationsService.php +++ b/Classes/Service/MigrateRelationsService.php @@ -217,16 +217,19 @@ protected function execSelectDamReferencesWhereSysFileExists() { return $this->database->exec_SELECTquery( 'tx_dam_mm_ref.*, - sys_file_metadata.title, - sys_file_metadata.description, - sys_file_metadata.alternative, - sys_file.uid as sys_file_uid', + sys_file_metadata.title, + sys_file_metadata.description, + sys_file_metadata.alternative, + sys_file.uid as sys_file_uid', 'tx_dam_mm_ref - JOIN sys_file ON - sys_file._migrateddamuid = tx_dam_mm_ref.uid_local - JOIN sys_file_metadata ON - sys_file.uid = sys_file_metadata.file - ', + JOIN tx_dam ON + tx_dam_mm_ref.uid_local = tx_dam.uid + JOIN sys_file ON + sys_file._migrateddamuid = tx_dam_mm_ref.uid_local + JOIN sys_file_metadata ON + (tx_dam.sys_language_uid = sys_file_metadata.sys_language_uid AND sys_file.uid = sys_file_metadata.file) + JOIN tt_content ON tx_dam_mm_ref.uid_foreign = tt_content.uid + ', $where, '', 'tx_dam_mm_ref.sorting ASC,tx_dam_mm_ref.sorting_foreign ASC',