]> source.dussan.org Git - nextcloud-server.git/commitdiff
don't delete share table entries for the unique name if re-share permission was removed
authorBjoern Schiessle <schiessle@owncloud.com>
Tue, 23 Dec 2014 16:10:05 +0000 (17:10 +0100)
committerBjoern Schiessle <schiessle@owncloud.com>
Wed, 7 Jan 2015 15:36:13 +0000 (16:36 +0100)
apps/files_sharing/tests/share.php
lib/private/share/helper.php

index 83ef17f49d1b5da936e0f433d1affa933334ea3e..b8c8b70bd1f92e0d68e81cc41e7e626a37a58f73 100644 (file)
@@ -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
index 3d20ba2d27ff718032015d5bcb8809fcb6b29151..5b27f0e6f500690066e0ea01727663ceb98641bb 100644 (file)
@@ -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();