diff options
author | Morris Jobke <hey@morrisjobke.de> | 2015-01-07 18:14:53 +0100 |
---|---|---|
committer | Morris Jobke <hey@morrisjobke.de> | 2015-01-07 18:14:53 +0100 |
commit | bfb6e350d54329bcf9ca91c0b44506a6eef13887 (patch) | |
tree | b0966a4fa905fc29866332ab549c33df7242a348 | |
parent | 10505bdb0db4d14ce86815b57d2bca2ef880a581 (diff) | |
parent | e9e7ee67d373e138b4a9749f9e9a7847a7d3875d (diff) | |
download | nextcloud-server-bfb6e350d54329bcf9ca91c0b44506a6eef13887.tar.gz nextcloud-server-bfb6e350d54329bcf9ca91c0b44506a6eef13887.zip |
Merge pull request #13016 from owncloud/sharing_fixes
don't delete share table entries for the unique name if re-share permission was removed
-rw-r--r-- | apps/files_sharing/tests/share.php | 32 | ||||
-rw-r--r-- | core/ajax/share.php | 4 | ||||
-rw-r--r-- | lib/private/share/helper.php | 8 |
3 files changed, 38 insertions, 6 deletions
diff --git a/apps/files_sharing/tests/share.php b/apps/files_sharing/tests/share.php index 83ef17f49d1..b8c8b70bd1f 100644 --- a/apps/files_sharing/tests/share.php +++ b/apps/files_sharing/tests/share.php @@ -246,6 +246,38 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase { \OC::$server->getConfig()->deleteSystemValue('share_folder'); } + function testShareWithGroupUniqueName() { + $this->loginHelper(self::TEST_FILES_SHARING_API_USER1); + \OC\Files\Filesystem::file_put_contents('test.txt', 'test'); + + $fileInfo = \OC\Files\Filesystem::getFileInfo('test.txt'); + + $this->assertTrue( + \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, self::TEST_FILES_SHARING_API_GROUP1, 23) + ); + + $this->loginHelper(self::TEST_FILES_SHARING_API_USER2); + + $items = \OCP\Share::getItemsSharedWith('file'); + $this->assertSame('/test.txt' ,$items[0]['file_target']); + $this->assertSame(23, $items[0]['permissions']); + + \OC\Files\Filesystem::rename('test.txt', 'new test.txt'); + + $items = \OCP\Share::getItemsSharedWith('file'); + $this->assertSame('/new test.txt' ,$items[0]['file_target']); + $this->assertSame(23, $items[0]['permissions']); + + $this->loginHelper(self::TEST_FILES_SHARING_API_USER1); + \OCP\Share::setPermissions('file', $items[0]['item_source'], $items[0]['share_type'], $items[0]['share_with'], 3); + + $this->loginHelper(self::TEST_FILES_SHARING_API_USER2); + $items = \OCP\Share::getItemsSharedWith('file'); + + $this->assertSame('/new test.txt' ,$items[0]['file_target']); + $this->assertSame(3, $items[0]['permissions']); + } + /** * shared files should never have delete permissions * @dataProvider DataProviderTestFileSharePermissions diff --git a/core/ajax/share.php b/core/ajax/share.php index 2831d42a367..1a2faa75dac 100644 --- a/core/ajax/share.php +++ b/core/ajax/share.php @@ -73,9 +73,9 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo $return = OCP\Share::setPermissions( $_POST['itemType'], $_POST['itemSource'], - $_POST['shareType'], + (int)$_POST['shareType'], $_POST['shareWith'], - $_POST['permissions'] + (int)$_POST['permissions'] ); ($return) ? OC_JSON::success() : OC_JSON::error(); } diff --git a/lib/private/share/helper.php b/lib/private/share/helper.php index 3d20ba2d27f..5b27f0e6f50 100644 --- a/lib/private/share/helper.php +++ b/lib/private/share/helper.php @@ -96,12 +96,12 @@ class Helper extends \OC\Share\Constants { // finding and deleting the reshares by a single user of a group share if (count($ids) == 1 && isset($uidOwner)) { $query = \OC_DB::prepare('SELECT `id`, `share_with`, `item_type`, `share_type`, `item_target`, `file_target`, `parent`' - .' FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.') AND `uid_owner` = ?'); - $result = $query->execute(array($uidOwner)); + .' FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.') AND `uid_owner` = ? AND `share_type` != ?'); + $result = $query->execute(array($uidOwner, self::$shareTypeGroupUserUnique)); } else { $query = \OC_DB::prepare('SELECT `id`, `share_with`, `item_type`, `share_type`, `item_target`, `file_target`, `parent`, `uid_owner`' - .' FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')'); - $result = $query->execute(); + .' FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.') AND `share_type` != ?'); + $result = $query->execute(array(self::$shareTypeGroupUserUnique)); } // Reset parents array, only go through loop again if items are found $parents = array(); |