2016-08-23 08:03:05 -04:00
< ? php
2025-06-30 09:04:05 -04:00
2016-08-23 08:03:05 -04:00
/**
2024-06-02 09:26:54 -04:00
* SPDX - FileCopyrightText : 2018 Nextcloud GmbH and Nextcloud contributors
* SPDX - FileCopyrightText : 2016 ownCloud GmbH .
* SPDX - License - Identifier : AGPL - 3.0 - only
2016-08-23 08:03:05 -04:00
*/
namespace OCA\Files_Versions\Command ;
2024-10-10 06:40:31 -04:00
use OC\Files\View ;
2016-08-23 08:03:05 -04:00
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 {
2023-08-03 09:05:09 -04:00
public function __construct (
private IUserManager $userManager ,
private Expiration $expiration ,
) {
2016-08-23 08:03:05 -04:00
parent :: __construct ();
}
2023-08-03 09:05:09 -04:00
protected function configure () : void {
2016-08-23 08:03:05 -04:00
$this
-> setName ( 'versions:expire' )
-> setDescription ( 'Expires the users file versions' )
-> addArgument (
'user_id' ,
InputArgument :: OPTIONAL | InputArgument :: IS_ARRAY ,
2022-09-21 11:44:32 -04:00
'expire file versions of the given account(s), if no account is given file versions for all accounts will be expired.'
2016-08-23 08:03:05 -04:00
);
}
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.' );
2023-08-03 09:05:09 -04:00
return self :: FAILURE ;
2016-08-23 08:03:05 -04:00
}
$users = $input -> getArgument ( 'user_id' );
if ( ! empty ( $users )) {
foreach ( $users as $user ) {
2023-08-03 09:12:56 -04:00
if ( ! $this -> userManager -> userExists ( $user )) {
2022-09-21 11:44:32 -04:00
$output -> writeln ( " <error>Unknown account $user </error> " );
2023-08-03 09:05:09 -04:00
return self :: FAILURE ;
2016-08-23 08:03:05 -04:00
}
2023-08-03 09:12:56 -04:00
$output -> writeln ( " Remove deleted files of <info> $user </info> " );
$userObject = $this -> userManager -> get ( $user );
$this -> expireVersionsForUser ( $userObject );
2016-08-23 08:03:05 -04:00
}
2023-08-03 09:12:56 -04:00
return self :: SUCCESS ;
2016-08-23 08:03:05 -04:00
}
2023-08-03 09:12:56 -04:00
$p = new ProgressBar ( $output );
$p -> start ();
2024-09-20 11:38:36 -04:00
$this -> userManager -> callForSeenUsers ( function ( IUser $user ) use ( $p ) : void {
2023-08-03 09:12:56 -04:00
$p -> advance ();
$this -> expireVersionsForUser ( $user );
});
$p -> finish ();
$output -> writeln ( '' );
2023-08-03 09:05:09 -04:00
return self :: SUCCESS ;
2016-08-23 08:03:05 -04:00
}
2023-08-03 09:05:09 -04:00
public function expireVersionsForUser ( IUser $user ) : void {
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
*/
2023-08-03 09:05:09 -04:00
protected function setupFS ( string $user ) : bool {
2016-08-23 08:03:05 -04:00
\OC_Util :: tearDownFS ();
\OC_Util :: setupFS ( $user );
// Check if this user has a version directory
2024-10-10 06:40:31 -04:00
$view = new View ( '/' . $user );
2016-08-23 08:03:05 -04:00
if ( ! $view -> is_dir ( '/files_versions' )) {
return false ;
}
return true ;
}
}