Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobia De Koninck <LEDfan@users.noreply.github.com>2020-01-03 10:43:39 +0300
committerBackportbot <backportbot-noreply@rullzer.com>2020-02-03 18:00:03 +0300
commit0b33aefc86cbbc76644d17222c125dbb7f5dd225 (patch)
tree18c86b1bcc264cfda16a0131701fd96f29f4986a /apps/files/lib
parentbe01ff127fe9a484806312f23e6671968e9aa5b8 (diff)
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/lib')
-rw-r--r--apps/files/lib/Command/TransferOwnership.php10
-rw-r--r--apps/files/lib/Service/OwnershipTransferService.php19
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,