* * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 * * This code is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License, version 3, * along with this program. If not, see * */ namespace OCA\Files_Versions\Command; use OCP\Files\IRootFolder; use OCP\IUserBackend; use OCP\IUserManager; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class CleanUp extends Command { /** @var IUserManager */ protected $userManager; /** @var IRootFolder */ protected $rootFolder; /** * @param IRootFolder $rootFolder * @param IUserManager $userManager */ function __construct(IRootFolder $rootFolder, IUserManager $userManager) { parent::__construct(); $this->userManager = $userManager; $this->rootFolder = $rootFolder; } protected function configure() { $this ->setName('versions:cleanup') ->setDescription('Delete versions') ->addArgument( 'user_id', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, 'delete versions of the given user(s), if no user is given all versions will be deleted' ); } protected function execute(InputInterface $input, OutputInterface $output) { $users = $input->getArgument('user_id'); if (!empty($users)) { foreach ($users as $user) { if ($this->userManager->userExists($user)) { $output->writeln("Delete versions of $user"); $this->deleteVersions($user); } else { $output->writeln("Unknown user $user"); } } } else { $output->writeln('Delete all versions'); foreach ($this->userManager->getBackends() as $backend) { $name = get_class($backend); if ($backend instanceof IUserBackend) { $name = $backend->getBackendName(); } $output->writeln("Delete versions for users on backend $name"); $limit = 500; $offset = 0; do { $users = $backend->getUsers('', $limit, $offset); foreach ($users as $user) { $output->writeln(" $user"); $this->deleteVersions($user); } $offset += $limit; } while (count($users) >= $limit); } } } /** * delete versions for the given user * * @param string $user */ protected function deleteVersions($user) { \OC_Util::tearDownFS(); \OC_Util::setupFS($user); if ($this->rootFolder->nodeExists('/' . $user . '/files_versions')) { $this->rootFolder->get('/' . $user . '/files_versions')->delete(); } } }