/** * Processes the actual transformation from CSV to sys_file_references * * @param array $record * @return void */ protected function migrateRecord(array $record) { $collections = array(); if (trim($record['select_key'])) { $GLOBALS['TYPO3_DB']->exec_INSERTquery('sys_file_collection', array('pid' => $record['pid'], 'title' => $record['select_key'], 'storage' => $this->storage->getUid(), 'folder' => ltrim('fileadmin/', $record['select_key']))); $collections[] = $GLOBALS['TYPO3_DB']->sql_insert_id(); } $files = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode(',', $record['media'], TRUE); $descriptions = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode(' ', $record['imagecaption']); $titleText = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode(' ', $record['titleText']); $i = 0; foreach ($files as $file) { if (file_exists(PATH_site . 'uploads/media/' . $file)) { \TYPO3\CMS\Core\Utility\GeneralUtility::upload_copy_move(PATH_site . 'uploads/media/' . $file, $this->targetDirectory . $file); $fileObject = $this->storage->getFile(self::FOLDER_ContentUploads . '/' . $file); $this->fileIndexRepository->add($fileObject); $dataArray = array('uid_local' => $fileObject->getUid(), 'tablenames' => 'tt_content', 'uid_foreign' => $record['uid'], 'pid' => $record['pid'], 'fieldname' => 'media', 'sorting_foreign' => $i); if (isset($descriptions[$i])) { $dataArray['description'] = $descriptions[$i]; } if (isset($titleText[$i])) { $dataArray['alternative'] = $titleText[$i]; } $GLOBALS['TYPO3_DB']->exec_INSERTquery('sys_file_reference', $dataArray); unlink(PATH_site . 'uploads/media/' . $file); } $i++; } $this->cleanRecord($record, $i, $collections); }
/** * @return FlashMessage */ public function execute() { $this->controller->headerMessage(LocalizationUtility::translate('moveDamRecordsToStorageCommand', 'dam_falmigration', array($this->storageObject->getName()))); if (!$this->isTableAvailable('tx_dam')) { return $this->getResultMessage('damTableNotFound'); } $this->fileIndexRepository = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Resource\\Index\\FileIndexRepository'); $result = $this->execSelectNotMigratedDamRecordsQuery(); $counter = 0; $total = $this->database->sql_num_rows($result); $this->controller->infoMessage('Found ' . $total . ' DAM records without a connection to a sys_file storage'); $relativeTargetFolderBasePath = $this->storageBasePath . $this->targetFolderBasePath; while ($damRecord = $this->database->sql_fetch_assoc($result)) { $counter++; try { $relativeSourceFilePath = GeneralUtility::fixWindowsFilePath($this->getFullFileName($damRecord)); $absoluteSourceFilePath = PATH_site . $relativeSourceFilePath; if (!file_exists($absoluteSourceFilePath)) { throw new \RuntimeException('No file found for DAM record. DAM uid: ' . $damRecord['uid'] . ': "' . $relativeSourceFilePath . '"', 1441110613); } list($_, $directory) = explode('/', dirname($relativeSourceFilePath), 2); $relativeTargetFolder = $relativeTargetFolderBasePath . rtrim($directory, '/') . '/'; $absoluteTargetFolder = PATH_site . $relativeTargetFolder; if (!is_dir($absoluteTargetFolder)) { GeneralUtility::mkdir_deep($absoluteTargetFolder); } $basename = basename($relativeSourceFilePath); $absoluteTargetFilePath = $absoluteTargetFolder . $basename; if (!file_exists($absoluteTargetFilePath)) { GeneralUtility::upload_copy_move($absoluteSourceFilePath, $absoluteTargetFilePath); } elseif (filesize($absoluteSourceFilePath) !== filesize($absoluteTargetFilePath)) { throw new \RuntimeException('File already exists. DAM uid: ' . $damRecord['uid'] . ': "' . $relativeSourceFilePath . '"', 1441112138); } $fileIdentifier = substr($relativeTargetFolder, strlen($this->storageBasePath)) . $basename; $fileObject = $this->storageObject->getFile($fileIdentifier); $this->fileIndexRepository->add($fileObject); $this->updateDamFilePath($damRecord['uid'], $relativeTargetFolder); $this->amountOfMigratedRecords++; } catch (\Exception $e) { $this->setDamFileMissingByUid($damRecord['uid']); $this->controller->warningMessage($e->getMessage()); $this->amountOfFilesNotFound++; continue; } } $this->database->sql_free_result($result); $this->controller->message('Not migrated dam records at start of task: ' . $total . '. Migrated files after task: ' . $this->amountOfMigratedRecords . '. Files not found: ' . $this->amountOfFilesNotFound . '.'); return $this->getResultMessage(); }
/** * Processes the actual transformation from CSV to sys_file_references * * @param array $source * @param array $destination * @param array $configuration * * @return void */ protected function migrateFilesToFal(array $source, array $destination, array $configuration) { $path = PATH_site . $configuration['sourcePath']; $files = GeneralUtility::trimExplode(',', $source[$configuration['sourceField']], true); $i = 1; foreach ($files as $file) { if (file_exists($path . $file)) { GeneralUtility::upload_copy_move($path . $file, $this->targetDirectory . $file); /** @var \TYPO3\CMS\Core\Resource\File $fileObject */ $fileObject = $this->storage->getFile(self::FILE_MIGRATION_FOLDER . $file); $this->fileIndexRepository->add($fileObject); $count = $this->database->exec_SELECTcountRows('*', 'sys_file_reference', 'tablenames = ' . $this->database->fullQuoteStr($configuration['destinationTable'], 'sys_file_reference') . ' AND fieldname = ' . $this->database->fullQuoteStr($configuration['destinationField'], 'sys_file_reference') . ' AND uid_local = ' . $fileObject->getUid() . ' AND uid_foreign = ' . $destination['uid']); if (!$count) { $dataArray = array('uid_local' => $fileObject->getUid(), 'tablenames' => $configuration['destinationTable'], 'uid_foreign' => $destination['uid'], 'pid' => $source['pid'], 'fieldname' => $configuration['destinationField'], 'sorting_foreign' => $i, 'table_local' => 'sys_file'); $this->database->exec_INSERTquery('sys_file_reference', $dataArray); } } $i++; } }