Merge pull request #6900 from owncloud/files-errormessagewhentargetfoldermissing
Added error message for when target folder was removed
This commit is contained in:
commit
afa00318bc
|
@ -64,6 +64,15 @@ if(strpos($filename, '/') !== false) {
|
|||
exit();
|
||||
}
|
||||
|
||||
if (!\OC\Files\Filesystem::file_exists($dir . '/')) {
|
||||
$result['data'] = array('message' => (string)$l10n->t(
|
||||
'The target folder has been moved or deleted.'),
|
||||
'code' => 'targetnotfound'
|
||||
);
|
||||
OCP\JSON::error($result);
|
||||
exit();
|
||||
}
|
||||
|
||||
//TODO why is stripslashes used on foldername in newfolder.php but not here?
|
||||
$target = $dir.'/'.$filename;
|
||||
|
||||
|
|
|
@ -29,6 +29,15 @@ if(strpos($foldername, '/') !== false) {
|
|||
exit();
|
||||
}
|
||||
|
||||
if (!\OC\Files\Filesystem::file_exists($dir . '/')) {
|
||||
$result['data'] = array('message' => (string)$l10n->t(
|
||||
'The target folder has been moved or deleted.'),
|
||||
'code' => 'targetnotfound'
|
||||
);
|
||||
OCP\JSON::error($result);
|
||||
exit();
|
||||
}
|
||||
|
||||
//TODO why is stripslashes used on foldername here but not in newfile.php?
|
||||
$target = $dir . '/' . stripslashes($foldername);
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ OCP\JSON::setContentTypeHeader('text/plain');
|
|||
// If no token is sent along, rely on login only
|
||||
|
||||
$allowedPermissions = OCP\PERMISSION_ALL;
|
||||
$errorCode = null;
|
||||
|
||||
$l = OC_L10N::get('files');
|
||||
if (empty($_POST['dirToken'])) {
|
||||
|
@ -125,7 +126,8 @@ if (strpos($dir, '..') === false) {
|
|||
|
||||
$meta = \OC\Files\Filesystem::getFileInfo($target);
|
||||
if ($meta === false) {
|
||||
$error = $l->t('Upload failed. Could not get file info.');
|
||||
$error = $l->t('The target folder has been moved or deleted.');
|
||||
$errorCode = 'targetnotfound';
|
||||
} else {
|
||||
$result[] = array('status' => 'success',
|
||||
'mime' => $meta['mimetype'],
|
||||
|
@ -177,5 +179,5 @@ if ($error === false) {
|
|||
OCP\JSON::encodedPrint($result);
|
||||
exit();
|
||||
} else {
|
||||
OCP\JSON::error(array(array('data' => array_merge(array('message' => $error), $storageStats))));
|
||||
OCP\JSON::error(array(array('data' => array_merge(array('message' => $error, 'code' => $errorCode), $storageStats))));
|
||||
}
|
||||
|
|
|
@ -315,6 +315,13 @@ $(document).ready(function() {
|
|||
} else {
|
||||
// HTTP connection problem
|
||||
OC.Notification.show(data.errorThrown);
|
||||
if (data.result) {
|
||||
var result = JSON.parse(data.result);
|
||||
if (result && result[0] && result[0].data && result[0].data.code === 'targetnotfound') {
|
||||
// abort upload of next files if any
|
||||
OC.Upload.cancelUploads();
|
||||
}
|
||||
}
|
||||
}
|
||||
//hide notification after 10 sec
|
||||
setTimeout(function() {
|
||||
|
|
|
@ -59,6 +59,13 @@ class App {
|
|||
$result['data'] = array(
|
||||
'message' => $this->l10n->t("Invalid folder name. Usage of 'Shared' is reserved.")
|
||||
);
|
||||
// rename to non-existing folder is denied
|
||||
} else if (!$this->view->file_exists($dir)) {
|
||||
$result['data'] = array('message' => (string)$this->l10n->t(
|
||||
'The target folder has been moved or deleted.',
|
||||
array($dir)),
|
||||
'code' => 'targetnotfound'
|
||||
);
|
||||
// rename to existing file is denied
|
||||
} else if ($this->view->file_exists($dir . '/' . $newname)) {
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
|
|||
$l10nMock->expects($this->any())
|
||||
->method('t')
|
||||
->will($this->returnArgument(0));
|
||||
$viewMock = $this->getMock('\OC\Files\View', array('rename', 'normalizePath', 'getFileInfo'), array(), '', false);
|
||||
$viewMock = $this->getMock('\OC\Files\View', array('rename', 'normalizePath', 'getFileInfo', 'file_exists'), array(), '', false);
|
||||
$viewMock->expects($this->any())
|
||||
->method('normalizePath')
|
||||
->will($this->returnArgument(0));
|
||||
|
@ -63,6 +63,11 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
|
|||
$oldname = 'Shared';
|
||||
$newname = 'new_name';
|
||||
|
||||
$this->viewMock->expects($this->at(0))
|
||||
->method('file_exists')
|
||||
->with('/')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$result = $this->files->rename($dir, $oldname, $newname);
|
||||
$expected = array(
|
||||
'success' => false,
|
||||
|
@ -80,6 +85,11 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
|
|||
$oldname = 'Shared';
|
||||
$newname = 'new_name';
|
||||
|
||||
$this->viewMock->expects($this->at(0))
|
||||
->method('file_exists')
|
||||
->with('/test')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$this->viewMock->expects($this->any())
|
||||
->method('getFileInfo')
|
||||
->will($this->returnValue(array(
|
||||
|
@ -129,6 +139,11 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
|
|||
$oldname = 'oldname';
|
||||
$newname = 'newname';
|
||||
|
||||
$this->viewMock->expects($this->at(0))
|
||||
->method('file_exists')
|
||||
->with('/')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$this->viewMock->expects($this->any())
|
||||
->method('getFileInfo')
|
||||
->will($this->returnValue(array(
|
||||
|
@ -141,7 +156,6 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
|
|||
'name' => 'new_name',
|
||||
)));
|
||||
|
||||
|
||||
$result = $this->files->rename($dir, $oldname, $newname);
|
||||
|
||||
$this->assertTrue($result['success']);
|
||||
|
@ -154,4 +168,35 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
|
|||
$this->assertEquals(\OC_Helper::mimetypeIcon('dir'), $result['data']['icon']);
|
||||
$this->assertFalse($result['data']['isPreviewAvailable']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test rename inside a folder that doesn't exist any more
|
||||
*/
|
||||
function testRenameInNonExistingFolder() {
|
||||
$dir = '/unexist';
|
||||
$oldname = 'oldname';
|
||||
$newname = 'newname';
|
||||
|
||||
$this->viewMock->expects($this->at(0))
|
||||
->method('file_exists')
|
||||
->with('/unexist')
|
||||
->will($this->returnValue(false));
|
||||
|
||||
$this->viewMock->expects($this->any())
|
||||
->method('getFileInfo')
|
||||
->will($this->returnValue(array(
|
||||
'fileid' => 123,
|
||||
'type' => 'dir',
|
||||
'mimetype' => 'httpd/unix-directory',
|
||||
'size' => 18,
|
||||
'etag' => 'abcdef',
|
||||
'directory' => '/unexist',
|
||||
'name' => 'new_name',
|
||||
)));
|
||||
|
||||
$result = $this->files->rename($dir, $oldname, $newname);
|
||||
|
||||
$this->assertFalse($result['success']);
|
||||
$this->assertEquals('targetnotfound', $result['data']['code']);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue