/** * 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 . '".'); } } } }