eZ\Bundle\EzPublishMigrationBundle\Command\LegacyStorage\UpdateSortKeysCommand::execute PHP Method

execute() protected method

protected execute ( Symfony\Component\Console\Input\InputInterface $input, Symfony\Component\Console\Output\OutputInterface $output )
$input Symfony\Component\Console\Input\InputInterface
$output Symfony\Component\Console\Output\OutputInterface
    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('');
    }