[Pkg-owncloud-commits] [owncloud] 206/223: Fixed uploading by drag and drop into folder

David Prévot taffit at moszumanska.debian.org
Sun Jun 22 01:54:26 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository owncloud.

commit 9ef7410abe282e2a81a9cd41672574a74282e4c3
Author: Vincent Petry <pvince81 at owncloud.com>
Date:   Wed Jun 18 20:38:51 2014 +0200

    Fixed uploading by drag and drop into folder
---
 apps/files/ajax/upload.php      | 40 +++++++++++++++++++++-------------------
 apps/files/js/file-upload.js    |  2 +-
 apps/files/js/filelist.js       | 11 +++--------
 apps/files_sharing/js/public.js |  2 +-
 4 files changed, 26 insertions(+), 29 deletions(-)

diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index 9750173..f9fcfaf 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -26,7 +26,7 @@ if (empty($_POST['dirToken'])) {
 
 	// return only read permissions for public upload
 	$allowedPermissions = OCP\PERMISSION_READ;
-	$public_directory = !empty($_POST['subdir']) ? $_POST['subdir'] : '/';
+	$publicDirectory = !empty($_POST['subdir']) ? $_POST['subdir'] : '/';
 
 	$linkItem = OCP\Share::getShareByToken($_POST['dirToken']);
 	if ($linkItem === false) {
@@ -50,13 +50,15 @@ if (empty($_POST['dirToken'])) {
 		$dir = sprintf(
 			"/%s/%s",
 			$path,
-			$public_directory
+			$publicDirectory
 		);
 
 		if (!$dir || empty($dir) || $dir === false) {
 			OCP\JSON::error(array('data' => array_merge(array('message' => $l->t('Unable to set upload directory.')))));
 			die();
 		}
+
+		$dir = rtrim($dir, '/');
 	}
 }
 
@@ -113,33 +115,33 @@ if ($maxUploadFileSize >= 0 and $totalSize > $maxUploadFileSize) {
 }
 
 $result = array();
-$directory = '';
 if (strpos($dir, '..') === false) {
 	$fileCount = count($files['name']);
 	for ($i = 0; $i < $fileCount; $i++) {
 
-		// Get the files directory
-		if(isset($_POST['file_directory']) === true) {
-			$directory = '/'.$_POST['file_directory'];
+		// target directory for when uploading folders
+		$relativePath = '';
+		if(!empty($_POST['file_directory'])) {
+			$relativePath = '/'.$_POST['file_directory'];
 		}
 
 		// $path needs to be normalized - this failed within drag'n'drop upload to a sub-folder
 		if (isset($_POST['resolution']) && $_POST['resolution']==='autorename') {
 			// append a number in brackets like 'filename (2).ext'
-			$target = OCP\Files::buildNotExistingFileName(stripslashes($dir.$directory), $files['name'][$i]);
+			$target = OCP\Files::buildNotExistingFileName(stripslashes($dir . $relativePath), $files['name'][$i]);
 		} else {
-			$target = \OC\Files\Filesystem::normalizePath(stripslashes($dir.$directory).'/'.$files['name'][$i]);
+			$target = \OC\Files\Filesystem::normalizePath(stripslashes($dir . $relativePath).'/'.$files['name'][$i]);
 		}
-		
-		if(empty($directory) === true)
-		{
-			$directory = \OC\Files\Filesystem::normalizePath(stripslashes($dir));
-			if (isset($public_directory)) {
-				// If we are uploading from the public app,
-				// we want to send the relative path in the ajax request.
-				$directory = $public_directory;
-			}
+
+		// relative dir to return to the client
+		if (isset($publicDirectory)) {
+			// path relative to the public root
+			$returnedDir = $publicDirectory . $relativePath;
+		} else {
+			// full path
+			$returnedDir = $dir . $relativePath;
 		}
+		$returnedDir = \OC\Files\Filesystem::normalizePath($returnedDir);
 
 		if ( ! \OC\Files\Filesystem::file_exists($target)
 			|| (isset($_POST['resolution']) && $_POST['resolution']==='replace')
@@ -163,7 +165,7 @@ if (strpos($dir, '..') === false) {
 						$data['uploadMaxFilesize'] = $maxUploadFileSize;
 						$data['maxHumanFilesize'] = $maxHumanFileSize;
 						$data['permissions'] = $meta['permissions'] & $allowedPermissions;
-						$data['directory'] = $directory;
+						$data['directory'] = $returnedDir;
 						$result[] = $data;
 					}
 
@@ -187,7 +189,7 @@ if (strpos($dir, '..') === false) {
 				$data['uploadMaxFilesize'] = $maxUploadFileSize;
 				$data['maxHumanFilesize'] = $maxHumanFileSize;
 				$data['permissions'] = $meta['permissions'] & $allowedPermissions;
-				$data['directory'] = $directory;
+				$data['directory'] = $returnedDir;
 				$result[] = $data;
 			}
 		}
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 6b0ca79..da58e1c 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -346,7 +346,7 @@ OC.Upload = {
 						// noone set update parameters, we set the minimum
 						data.formData = {
 							requesttoken: oc_requesttoken,
-							dir: FileList.getCurrentDirectory(),
+							dir: data.targetDir || FileList.getCurrentDirectory(),
 							file_directory: fileDirectory
 						};
 					}
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 85c5d3f..cb6c3dc 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -1561,17 +1561,12 @@
 						dir = dropTarget.data('dir') || '/';
 					}
 
-					// update folder in form
-					data.formData = function() {
-						return [
-							{name: 'dir', value: dir},
-							{name: 'requesttoken', value: oc_requesttoken},
-							{name: 'file_directory', value: data.files[0].relativePath}
-						];
-					};
+					// add target dir
+					data.targetDir = dir;
 				} else {
 					// we are dropping somewhere inside the file list, which will
 					// upload the file to the current directory
+					data.targetDir = self.getCurrentDirectory();
 
 					// cancel uploads to current dir if no permission
 					var isCreatable = (self.getDirectoryPermissions() & OC.PERMISSION_CREATE) !== 0;
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index 8063190..1d633a6 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -128,7 +128,7 @@ OCA.Sharing.PublicApp = {
 				data.formData = {
 					requesttoken: $('#publicUploadRequestToken').val(),
 					dirToken: $('#dirToken').val(),
-					subdir: self.fileList.getCurrentDirectory(),
+					subdir: data.targetDir || self.fileList.getCurrentDirectory(),
 					file_directory: fileDirectory
 				};
 			});

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list