diff options
author | Tobia De Koninck <LEDfan@users.noreply.github.com> | 2020-01-03 08:43:39 +0100 |
---|---|---|
committer | Roeland Jago Douma <roeland@famdouma.nl> | 2020-02-03 11:15:56 +0100 |
commit | 7c56144f4927ed56d02c197710833c2b10c2f65d (patch) | |
tree | 7e83aa441d61636403136d8e7cc4f5864154ef57 /apps/files | |
parent | 411058e47cd42871b2099190ac67f47b9bd17e30 (diff) | |
download | nextcloud-server-7c56144f4927ed56d02c197710833c2b10c2f65d.tar.gz nextcloud-server-7c56144f4927ed56d02c197710833c2b10c2f65d.zip |
Add option to transfer-ownership to move data
This will move the home folder of own user to another user. Only allowed
if that other user's home folder is empty.
Can be used as workaround to rename users.
Signed-off-by: Tobia De Koninck <LEDfan@users.noreply.github.com>
Diffstat (limited to 'apps/files')
-rw-r--r-- | apps/files/lib/Command/TransferOwnership.php | 10 | ||||
-rw-r--r-- | apps/files/lib/Service/OwnershipTransferService.php | 19 |
2 files changed, 24 insertions, 5 deletions
diff --git a/apps/files/lib/Command/TransferOwnership.php b/apps/files/lib/Command/TransferOwnership.php index cad1b1b46cb..2675a7dd1bb 100644 --- a/apps/files/lib/Command/TransferOwnership.php +++ b/apps/files/lib/Command/TransferOwnership.php @@ -77,7 +77,12 @@ class TransferOwnership extends Command { InputOption::VALUE_REQUIRED, 'selectively provide the path to transfer. For example --path="folder_name"', '' - ); + )->addOption( + 'move', + null, + InputOption::VALUE_NONE, + 'move data from source user to root directory of destination user, which must be empty' + ); } protected function execute(InputInterface $input, OutputInterface $output) { @@ -99,7 +104,8 @@ class TransferOwnership extends Command { $sourceUserObject, $destinationUserObject, ltrim($input->getOption('path'), '/'), - $output + $output, + $input->getOption('move') === true ); } catch (TransferOwnershipException $e) { $output->writeln("<error>" . $e->getMessage() . "</error>"); diff --git a/apps/files/lib/Service/OwnershipTransferService.php b/apps/files/lib/Service/OwnershipTransferService.php index 8530edd17b1..8af894a0167 100644 --- a/apps/files/lib/Service/OwnershipTransferService.php +++ b/apps/files/lib/Service/OwnershipTransferService.php @@ -71,12 +71,16 @@ class OwnershipTransferService { * @param IUser $destinationUser * @param string $path * + * @param OutputInterface|null $output + * @param bool $move * @throws TransferOwnershipException + * @throws \OC\User\NoUserException */ public function transfer(IUser $sourceUser, IUser $destinationUser, string $path, - ?OutputInterface $output = null): void { + ?OutputInterface $output = null, + bool $move = false): void { $output = $output ?? new NullOutput(); $sourceUid = $sourceUser->getUID(); $destinationUid = $destinationUser->getUID(); @@ -87,8 +91,12 @@ class OwnershipTransferService { throw new TransferOwnershipException("The target user is not ready to accept files. The user has at least to have logged in once.", 2); } - $date = date('Y-m-d H-i-s'); - $finalTarget = "$destinationUid/files/transferred from $sourceUid on $date"; + if ($move) { + $finalTarget = "$destinationUid/files/"; + } else { + $date = date('Y-m-d H-i-s'); + $finalTarget = "$destinationUid/files/transferred from $sourceUid on $date"; + } // setup filesystem Filesystem::initMountPoints($sourceUid); @@ -99,6 +107,11 @@ class OwnershipTransferService { throw new TransferOwnershipException("Unknown path provided: $path", 1); } + if ($move && (!$view->is_dir($finalTarget) || count($view->getDirectoryContent($finalTarget)) > 0)) { + throw new TransferOwnershipException("Destination path does not exists or is not empty", 1); + } + + // analyse source folder $this->analyse( $sourceUid, |