/** * Actually cleans the database record fields with a new FlexForm as chosen currently for this record * * @param array $records * @param bool $dryRun * @param SymfonyStyle $io * @return void */ protected function cleanFlexFormRecords(array $records, bool $dryRun, SymfonyStyle $io) { $flexObj = GeneralUtility::makeInstance(FlexFormTools::class); // Set up the data handler instance $dataHandler = GeneralUtility::makeInstance(DataHandler::class); $dataHandler->dontProcessTransformations = true; $dataHandler->bypassWorkspaceRestrictions = true; $dataHandler->bypassFileHandling = true; // Setting this option allows to also update deleted records (or records on deleted pages) within DataHandler $dataHandler->bypassAccessCheckForRecords = true; // Loop through all tables and their records foreach ($records as $recordIdentifier => $fullRecord) { list($table, $uid, $field) = explode(':', $recordIdentifier); if ($io->isVerbose()) { $io->writeln('Cleaning FlexForm XML in "' . $recordIdentifier . '"'); } if (!$dryRun) { // Clean XML now $data = []; if ($fullRecord[$field]) { $data[$table][$uid][$field] = $flexObj->cleanFlexFormXML($table, $field, $fullRecord); } else { $io->note('The field "' . $field . '" in record "' . $table . ':' . $uid . '" was not found.'); continue; } $dataHandler->start($data, []); $dataHandler->process_datamap(); // Return errors if any: if (!empty($dataHandler->errorLog)) { $errorMessage = array_merge(['DataHandler reported an error'], $dataHandler->errorLog); $io->error($errorMessage); } elseif (!$io->isQuiet()) { $io->writeln('Updated FlexForm in record "' . $table . ':' . $uid . '".'); } } } }
/** * Function to update the reference index * - if the option --update-refindex is set, do it * - otherwise, if in interactive mode (not having -n set), ask the user * - otherwise assume everything is fine * * @param InputInterface $input holds information about entered parameters * @param SymfonyStyle $io necessary for outputting information * @return void */ protected function updateReferenceIndex(InputInterface $input, SymfonyStyle $io) { // Check for reference index to update $io->note('Finding missing files referenced by TYPO3 requires a clean reference index (sys_refindex)'); if ($input->hasOption('update-refindex') && $input->getOption('update-refindex')) { $updateReferenceIndex = true; } elseif ($input->isInteractive()) { $updateReferenceIndex = $io->confirm('Should the reference index be updated right now?', false); } else { $updateReferenceIndex = false; } // Update the reference index if ($updateReferenceIndex) { $referenceIndex = GeneralUtility::makeInstance(ReferenceIndex::class); $referenceIndex->updateIndex(false, !$io->isQuiet()); } else { $io->writeln('Reference index is assumed to be up to date, continuing.'); } }
/** * Removes given files from the uploads/ folder * * @param array $lostFiles Contains the lost files found * @param bool $dryRun if set, the files are just displayed, but not deleted * @param SymfonyStyle $io the IO object for output * @return void */ protected function deleteLostFiles(array $lostFiles, bool $dryRun, SymfonyStyle $io) { foreach ($lostFiles as $lostFile) { $absoluteFileName = GeneralUtility::getFileAbsFileName($lostFile); if ($io->isVeryVerbose()) { $io->writeln('Deleting file "' . $absoluteFileName . '"'); } if (!$dryRun) { if ($absoluteFileName && @is_file($absoluteFileName)) { unlink($absoluteFileName); if (!$io->isQuiet()) { $io->writeln('Permanently deleted file record "' . $absoluteFileName . '".'); } } else { $io->error('File "' . $absoluteFileName . '" was not found!'); } } } }