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