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