diff options
author | Vincent Petry <pvince81@owncloud.com> | 2016-06-07 16:29:23 +0200 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2016-06-07 16:29:23 +0200 |
commit | 15fffb2b10d8f6c5040ea1dc7e27931c5db497a2 (patch) | |
tree | d4b520c216773441a5d0418c864c26f41d2062e7 /apps/files_external | |
parent | 46fe2ddf2e7a4413586095143521684a0377daad (diff) | |
download | nextcloud-server-15fffb2b10d8f6c5040ea1dc7e27931c5db497a2.tar.gz nextcloud-server-15fffb2b10d8f6c5040ea1dc7e27931c5db497a2.zip |
Fix GDrive upload file which name might match the one of a folder
Whenever a file is uploaded to GDrive, there is a check for that file
with and without extension, due to Google Docs files having no
extension. This logic now only kicks in whenever the detected
extensionless file is really a Google Doc file, not a folder.
This makes it possible again to upload a file "test.txt" in a folder
that also has a folder called "test"
Diffstat (limited to 'apps/files_external')
-rw-r--r-- | apps/files_external/lib/Lib/Storage/Google.php | 16 | ||||
-rw-r--r-- | apps/files_external/tests/Storage/GoogleTest.php | 9 |
2 files changed, 24 insertions, 1 deletions
diff --git a/apps/files_external/lib/Lib/Storage/Google.php b/apps/files_external/lib/Lib/Storage/Google.php index 2a1ff768e2c..49fde7d066f 100644 --- a/apps/files_external/lib/Lib/Storage/Google.php +++ b/apps/files_external/lib/Lib/Storage/Google.php @@ -97,6 +97,9 @@ class Google extends \OC\Files\Storage\Common { private function getDriveFile($path) { // Remove leading and trailing slashes $path = trim($path, '/'); + if ($path === '.') { + $path = ''; + } if (isset($this->driveFiles[$path])) { return $this->driveFiles[$path]; } else if ($path === '') { @@ -138,7 +141,7 @@ class Google extends \OC\Files\Storage\Common { if ($pos !== false) { $pathWithoutExt = substr($path, 0, $pos); $file = $this->getDriveFile($pathWithoutExt); - if ($file) { + if ($file && $this->isGoogleDocFile($file)) { // Switch cached Google_Service_Drive_DriveFile to the correct index unset($this->driveFiles[$pathWithoutExt]); $this->driveFiles[$path] = $file; @@ -208,6 +211,17 @@ class Google extends \OC\Files\Storage\Common { } } + /** + * Returns whether the given drive file is a Google Doc file + * + * @param \Google_Service_Drive_DriveFile + * + * @return true if the file is a Google Doc file, false otherwise + */ + private function isGoogleDocFile($file) { + return $this->getGoogleDocExtension($file->getMimeType()) !== ''; + } + public function mkdir($path) { if (!$this->is_dir($path)) { $parentFolder = $this->getDriveFile(dirname($path)); diff --git a/apps/files_external/tests/Storage/GoogleTest.php b/apps/files_external/tests/Storage/GoogleTest.php index 7684fec8429..eb19cc463b1 100644 --- a/apps/files_external/tests/Storage/GoogleTest.php +++ b/apps/files_external/tests/Storage/GoogleTest.php @@ -60,4 +60,13 @@ class GoogleTest extends \Test\Files\Storage\Storage { parent::tearDown(); } + + public function testSameNameAsFolderWithExtension() { + $this->assertTrue($this->instance->mkdir('testsamename')); + $this->assertEquals(13, $this->instance->file_put_contents('testsamename.txt', 'some contents')); + $this->assertEquals('some contents', $this->instance->file_get_contents('testsamename.txt')); + $this->assertTrue($this->instance->is_dir('testsamename')); + $this->assertTrue($this->instance->unlink('testsamename.txt')); + $this->assertTrue($this->instance->rmdir('testsamename')); + } } |