Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions apps/files_trashbin/appinfo/register_command.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,16 @@
*/


use OCA\Files_Trashbin\AppInfo\Application;
use OCA\Files_Trashbin\Command\CleanUp;
use OCA\Files_Trashbin\Command\ExpireTrash;

$app = new Application();
$expiration = $app->getContainer()->query('Expiration');
$userManager = OC::$server->getUserManager();
$rootFolder = \OC::$server->getRootFolder();
$dbConnection = \OC::$server->getDatabaseConnection();

/** @var Symfony\Component\Console\Application $application */
$application->add(new CleanUp($rootFolder, $userManager, $dbConnection));
$application->add(new ExpireTrash($userManager, $expiration));
127 changes: 127 additions & 0 deletions apps/files_trashbin/lib/Command/ExpireTrash.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
<?php
/**
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @copyright Copyright (c) 2016, ownCloud GmbH.
* @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 <http://www.gnu.org/licenses/>
*
*/

namespace OCA\Files_Trashbin\Command;

use OCP\IUser;
use OCP\IUserManager;
use OCA\Files_Trashbin\Expiration;
use OCA\Files_Trashbin\Helper;
use OCA\Files_Trashbin\Trashbin;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Helper\ProgressBar;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class ExpireTrash extends Command {

/**
* @var Expiration
*/
private $expiration;

/**
* @var IUserManager
*/
private $userManager;

/**
* @param IUserManager|null $userManager
* @param Expiration|null $expiration
*/
public function __construct(IUserManager $userManager = null,
Expiration $expiration = null) {
parent::__construct();

$this->userManager = $userManager;
$this->expiration = $expiration;
}

protected function configure() {
$this
->setName('trashbin:expire')
->setDescription('Expires the users trashbin')
->addArgument(
'user_id',
InputArgument::OPTIONAL | InputArgument::IS_ARRAY,
'expires the trashbin of the given user(s), if no user is given the trash for all users will be expired'
);
}

protected function execute(InputInterface $input, OutputInterface $output) {

$maxAge = $this->expiration->getMaxAgeAsTimestamp();
if (!$maxAge) {
$output->writeln("No expiry configured.");
return;
}

$users = $input->getArgument('user_id');
if (!empty($users)) {
foreach ($users as $user) {
if ($this->userManager->userExists($user)) {
$output->writeln("Remove deleted files of <info>$user</info>");
$userObject = $this->userManager->get($user);
$this->expireTrashForUser($userObject);
} else {
$output->writeln("<error>Unknown user $user</error>");
}
}
} else {
$p = new ProgressBar($output);
$p->start();
$this->userManager->callForAllUsers(function(IUser $user) use ($p) {
$p->advance();
$this->expireTrashForUser($user);
});
$p->finish();
$output->writeln('');
}
}

function expireTrashForUser(IUser $user) {
$uid = $user->getUID();
if ($user->getLastLogin() === 0 || !$this->setupFS($uid)) {
return;
}
$dirContent = Helper::getTrashFiles('/', $uid, 'mtime');
Trashbin::deleteExpiredFiles($dirContent, $uid);
}

/**
* Act on behalf on trash item owner
* @param string $user
* @return boolean
*/
protected function setupFS($user) {
\OC_Util::tearDownFS();
\OC_Util::setupFS($user);

// Check if this user has a trashbin directory
$view = new \OC\Files\View('/' . $user);
if (!$view->is_dir('/files_trashbin/files')) {
return false;
}

return true;
}
}
5 changes: 5 additions & 0 deletions apps/files_versions/appinfo/register_command.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,14 @@
*/


use OCA\Files_Versions\AppInfo\Application;
use OCA\Files_Versions\Command\CleanUp;
use OCA\Files_Versions\Command\ExpireVersions;

$app = new Application();
$expiration = $app->getContainer()->query('Expiration');
$userManager = OC::$server->getUserManager();
$rootFolder = \OC::$server->getRootFolder();
/** @var Symfony\Component\Console\Application $application */
$application->add(new CleanUp($rootFolder, $userManager));
$application->add(new ExpireVersions($userManager, $expiration));
125 changes: 125 additions & 0 deletions apps/files_versions/lib/Command/ExpireVersions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
<?php
/**
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @copyright Copyright (c) 2016, ownCloud GmbH.
* @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 <http://www.gnu.org/licenses/>
*
*/

namespace OCA\Files_Versions\Command;

use OCA\Files_Versions\Expiration;
use OCA\Files_Versions\Storage;
use OCP\IUser;
use OCP\IUserManager;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Helper\ProgressBar;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class ExpireVersions extends Command {

/**
* @var Expiration
*/
private $expiration;

/**
* @var IUserManager
*/
private $userManager;

/**
* @param IUserManager|null $userManager
* @param Expiration|null $expiration
*/
public function __construct(IUserManager $userManager = null,
Expiration $expiration = null) {
parent::__construct();

$this->userManager = $userManager;
$this->expiration = $expiration;
}

protected function configure() {
$this
->setName('versions:expire')
->setDescription('Expires the users file versions')
->addArgument(
'user_id',
InputArgument::OPTIONAL | InputArgument::IS_ARRAY,
'expire file versions of the given user(s), if no user is given file versions for all users will be expired.'
);
}

protected function execute(InputInterface $input, OutputInterface $output) {

$maxAge = $this->expiration->getMaxAgeAsTimestamp();
if (!$maxAge) {
$output->writeln("No expiry configured.");
return;
}

$users = $input->getArgument('user_id');
if (!empty($users)) {
foreach ($users as $user) {
if ($this->userManager->userExists($user)) {
$output->writeln("Remove deleted files of <info>$user</info>");
$userObject = $this->userManager->get($user);
$this->expireVersionsForUser($userObject);
} else {
$output->writeln("<error>Unknown user $user</error>");
}
}
} else {
$p = new ProgressBar($output);
$p->start();
$this->userManager->callForAllUsers(function(IUser $user) use ($p) {
$p->advance();
$this->expireVersionsForUser($user);
});
$p->finish();
$output->writeln('');
}
}

function expireVersionsForUser(IUser $user) {
$uid = $user->getUID();
if ($user->getLastLogin() === 0 || !$this->setupFS($uid)) {
return;
}
Storage::expireOlderThanMaxForUser($uid);
}

/**
* Act on behalf on versions item owner
* @param string $user
* @return boolean
*/
protected function setupFS($user) {
\OC_Util::tearDownFS();
\OC_Util::setupFS($user);

// Check if this user has a version directory
$view = new \OC\Files\View('/' . $user);
if (!$view->is_dir('/files_versions')) {
return false;
}

return true;
}
}