protected function execute(InputInterface $input, OutputInterface $output)
{
$fieldTypeIdentifier = $input->getArgument('fieldtype_identifier');
$bulkCount = $input->getArgument('bulk_count');
$dryRun = $input->getOption('dry-run');
/** @var \eZ\Publish\Core\Persistence\Database\DatabaseHandler $databaseHandler */
$databaseHandler = $this->getContainer()->get('ezpublish.connection');
/** @var \eZ\Publish\API\Repository\Repository $repository */
$repository = $this->getContainer()->get('ezpublish.api.repository');
$repository->setCurrentUser($repository->getUserService()->loadUser(14));
if (!$this->getContainer()->has("ezpublish.fieldtype.{$fieldTypeIdentifier}")) {
$output->writeln("<error>Field type '{$fieldTypeIdentifier}' was not found.</error> ");
return;
}
$warningStyle = new OutputFormatterStyle('red');
$output->getFormatter()->setStyle('warning', $warningStyle);
$output->writeln($this->getProcessedHelp());
$query = $databaseHandler->createSelectQuery();
$query->select($query->expr->count('DISTINCT ' . $query->expr->concat($databaseHandler->quoteColumn('contentobject_id'), $query->bindValue('-', null, PDO::PARAM_STR), $databaseHandler->quoteColumn('version'))))->from('ezcontentobject_attribute')->where($query->expr->eq($databaseHandler->quoteColumn('data_type_string'), $query->bindValue($fieldTypeIdentifier)));
$stmt = $query->prepare();
$stmt->execute();
$totalCount = $stmt->fetchColumn();
$output->writeln(array('Found total Content versions to update: ' . $totalCount, ''));
if ($totalCount == 0) {
$output->writeln('Nothing to process, exiting.');
return;
}
$helper = $this->getHelper('question');
$question = new ConfirmationQuestion('<question>Are you sure you want to proceed?</question> ', false);
if (!$helper->ask($input, $output, $question)) {
$output->writeln('');
return;
}
$query = $databaseHandler->createSelectQuery();
$query->selectDistinct('contentobject_id, version')->from('ezcontentobject_attribute')->where($query->expr->eq($databaseHandler->quoteColumn('data_type_string'), $query->bindValue($fieldTypeIdentifier)));
$passCount = ceil($totalCount / $bulkCount);
$progress = new ProgressBar($output, $totalCount);
$progress->setFormat(' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s% %memory:6s%');
$output->writeln('');
$progress->start();
for ($pass = 0; $pass <= $passCount; ++$pass) {
$rows = $this->loadData($query, $bulkCount, $pass);
foreach ($rows as $row) {
$this->updateField($output, $progress, $row['contentobject_id'], $row['version'], $fieldTypeIdentifier, $dryRun);
$progress->advance();
}
}
$progress->finish();
$output->writeln('');
}