From 57f841da2c414209ad9d4ae5a1cd0ac5ba604b7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Mon, 5 Oct 2015 17:31:37 +0200 Subject: [PATCH] Recursively lock folder contents --- lib/private/files.php | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/lib/private/files.php b/lib/private/files.php index af3a8ac574..099602d56b 100644 --- a/lib/private/files.php +++ b/lib/private/files.php @@ -40,6 +40,7 @@ * */ +use OC\Files\View; use OC\Streamer; use OCP\Lock\ILockingProvider; @@ -123,14 +124,10 @@ class OC_Files { $view->lockFile($filename, ILockingProvider::LOCK_SHARED); } if ($getType === self::ZIP_FILES) { - foreach ($files as $file) { - $file = $dir . '/' . $file; - $view->lockFile($file, ILockingProvider::LOCK_SHARED); - } + self::lockFiles($view, $dir, $files); } if ($getType === self::ZIP_DIR) { - $file = $dir . '/' . $files; - $view->lockFile($file, ILockingProvider::LOCK_SHARED); + self::lockFiles($view, $dir, $files); } if ($streamer) { @@ -189,6 +186,30 @@ class OC_Files { } } + /** + * @param View $view + * @param $dir + * @param string[]|string $files + */ + public static function lockFiles($view, $dir, $files) { + if (!is_array($files)) { + $file = $dir . '/' . $files; + $files = [$file]; + } + foreach ($files as $file) { + $file = $dir . '/' . $file; + $view->lockFile($file, ILockingProvider::LOCK_SHARED); + if ($view->is_dir($file)) { + $contents = $view->getDirectoryContent($file); + $contents = array_map(function($fileInfo) use ($file) { + /** @var \OCP\Files\FileInfo $fileInfo */ + return $file . '/' . $fileInfo->getName(); + }, $contents); + self::lockFiles($view, $dir, $contents); + } + } + } + /** * set the maximum upload size limit for apache hosts using .htaccess *