setName('sharing:fix-owncloud-group-shares')
->setDescription('Fix group share subshares left pending after renaming on an ownCloud-migrated instance')
->addOption(
'dry-run',
null,
InputOption::VALUE_NONE,
'Show how many shares would be fixed without making any changes',
);
}
#[\Override]
public function execute(InputInterface $input, OutputInterface $output): int {
$dryRun = $input->getOption('dry-run');
$qb = $this->connection->getQueryBuilder();
$count = (int)$qb->select($qb->func()->count('id'))
->from('share')
->where($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_USERGROUP, IQueryBuilder::PARAM_INT)))
->andWhere($qb->expr()->eq('accepted', $qb->createNamedParameter(IShare::STATUS_PENDING, IQueryBuilder::PARAM_INT)))
->andWhere($qb->expr()->neq('permissions', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)))
->executeQuery()
->fetchOne();
if ($count === 0) {
$output->writeln('No affected group share subshares found.');
return self::SUCCESS;
}
if ($dryRun) {
$output->writeln("Would fix $count group share subshare(s) (dry-run, no changes made).");
return self::SUCCESS;
}
$qb = $this->connection->getQueryBuilder();
$qb->update('share')
->set('accepted', $qb->createNamedParameter(IShare::STATUS_ACCEPTED, IQueryBuilder::PARAM_INT))
->where($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_USERGROUP, IQueryBuilder::PARAM_INT)))
->andWhere($qb->expr()->eq('accepted', $qb->createNamedParameter(IShare::STATUS_PENDING, IQueryBuilder::PARAM_INT)))
->andWhere($qb->expr()->neq('permissions', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)))
->executeStatement();
$output->writeln("Fixed $count group share subshare(s).");
return self::SUCCESS;
}
}