2016-08-23 08:03:05 -04:00
< ? php
/**
2017-11-06 09:56:42 -05:00
* @ copyright Copyright ( c ) 2016 , ownCloud GmbH .
*
2020-04-29 05:57:22 -04:00
* @ author Christoph Wurst < christoph @ winzerhof - wurst . at >
2020-08-24 08:54:25 -04:00
* @ author Joas Schilling < coding @ schilljs . com >
2017-11-06 09:56:42 -05:00
* @ author Jörn Friedrich Dreyer < jfd @ butonic . de >
2019-12-03 13:57:53 -05:00
* @ author Roeland Jago Douma < roeland @ famdouma . nl >
2016-08-23 08:03:05 -04:00
* @ author Thomas Müller < thomas . mueller @ tmit . eu >
*
* @ 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 ,
2019-12-03 13:57:53 -05:00
* along with this program . If not , see < http :// www . gnu . org / licenses />
2016-08-23 08:03:05 -04:00
*
*/
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 ;
2020-06-26 09:12:11 -04:00
2016-08-23 08:03:05 -04:00
/**
* @ var IUserManager
*/
private $userManager ;
/**
2018-05-11 16:25:07 -04:00
* @ param IUserManager $userManager
* @ param Expiration $expiration
2016-08-23 08:03:05 -04:00
*/
2018-05-11 16:25:07 -04:00
public function __construct ( IUserManager $userManager ,
Expiration $expiration ) {
2016-08-23 08:03:05 -04:00
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.'
);
}
2020-06-26 09:12:11 -04:00
protected function execute ( InputInterface $input , OutputInterface $output ) : int {
2016-08-23 08:03:05 -04:00
$maxAge = $this -> expiration -> getMaxAgeAsTimestamp ();
if ( ! $maxAge ) {
2021-07-28 06:58:01 -04:00
$output -> writeln ( " Auto expiration is configured - expiration will be handled automatically according to the expiration patterns detailed at the following link https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/file_versioning.html. " );
2020-06-26 09:25:33 -04:00
return 1 ;
2016-08-23 08:03:05 -04:00
}
$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> " );
2020-06-26 09:12:11 -04:00
return 1 ;
2016-08-23 08:03:05 -04:00
}
}
} else {
$p = new ProgressBar ( $output );
$p -> start ();
2020-04-09 07:53:40 -04:00
$this -> userManager -> callForSeenUsers ( function ( IUser $user ) use ( $p ) {
2016-08-23 08:03:05 -04:00
$p -> advance ();
$this -> expireVersionsForUser ( $user );
});
$p -> finish ();
$output -> writeln ( '' );
}
2020-06-26 09:12:11 -04:00
return 0 ;
2016-08-23 08:03:05 -04:00
}
2020-04-10 10:51:06 -04:00
public function expireVersionsForUser ( IUser $user ) {
2016-08-23 08:03:05 -04:00
$uid = $user -> getUID ();
2016-10-19 04:03:29 -04:00
if ( ! $this -> setupFS ( $uid )) {
2016-08-23 08:03:05 -04:00
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 ;
}
}