diff --git a/lib/private/Share/Share.php b/lib/private/Share/Share.php index c624f24312..b37d167d89 100644 --- a/lib/private/Share/Share.php +++ b/lib/private/Share/Share.php @@ -520,60 +520,6 @@ class Share extends Constants { return false; } - /** - * Get the owners of items shared with a user. - * - * @param string $user The user the items are shared with. - * @param string $type The type of the items shared with the user. - * @param boolean $includeCollections Include collection item types (optional) - * @param boolean $includeOwner include owner in the list of users the item is shared with (optional) - * @return array - * @deprecated TESTS ONLY - this methods is only used by tests - * called like this: - * \OC\Share\Share::getSharedItemsOwners($this->user, $this->type, true) - */ - public static function getSharedItemsOwners($user, $type, $includeCollections = false, $includeOwner = false) { - // First, we find out if $type is part of a collection (and if that collection is part of - // another one and so on). - $collectionTypes = []; - if (!$includeCollections || !$collectionTypes = self::getCollectionItemTypes($type)) { - $collectionTypes[] = $type; - } - - // Of these collection types, along with our original $type, we make a - // list of the ones for which a sharing backend has been registered. - // FIXME: Ideally, we wouldn't need to nest getItemsSharedWith in this loop but just call it - // with its $includeCollections parameter set to true. Unfortunately, this fails currently. - $allMaybeSharedItems = []; - foreach ($collectionTypes as $collectionType) { - if (isset(self::$backends[$collectionType])) { - $allMaybeSharedItems[$collectionType] = self::getItemsSharedWithUser( - $collectionType, - $user, - self::FORMAT_NONE - ); - } - } - - $owners = []; - if ($includeOwner) { - $owners[] = $user; - } - - // We take a look at all shared items of the given $type (or of the collections it is part of) - // and find out their owners. Then, we gather the tags for the original $type from all owners, - // and return them as elements of a list that look like "Tag (owner)". - foreach ($allMaybeSharedItems as $collectionType => $maybeSharedItems) { - foreach ($maybeSharedItems as $sharedItem) { - if (isset($sharedItem['id'])) { //workaround for https://github.com/owncloud/core/issues/2814 - $owners[] = $sharedItem['uid_owner']; - } - } - } - - return $owners; - } - /** * Get shared items from the database * @param string $itemType diff --git a/lib/private/TagManager.php b/lib/private/TagManager.php index ecc80b271f..96786c58a1 100644 --- a/lib/private/TagManager.php +++ b/lib/private/TagManager.php @@ -76,6 +76,8 @@ class TagManager implements \OCP\ITagManager { * @param string $userId user for which to retrieve the tags, defaults to the currently * logged in user * @return \OCP\ITags + * + * since 20.0.0 $includeShared isn't used anymore */ public function load($type, $defaultTags = [], $includeShared = false, $userId = null) { if (is_null($userId)) { @@ -86,6 +88,6 @@ class TagManager implements \OCP\ITagManager { } $userId = $this->userSession->getUser()->getUId(); } - return new Tags($this->mapper, $userId, $type, $defaultTags, $includeShared); + return new Tags($this->mapper, $userId, $type, $defaultTags); } } diff --git a/lib/private/Tags.php b/lib/private/Tags.php index 92263ca4fb..3fc66c69d6 100644 --- a/lib/private/Tags.php +++ b/lib/private/Tags.php @@ -119,18 +119,14 @@ class Tags implements ITags { * @param string $user The user whose data the object will operate on. * @param string $type The type of items for which tags will be loaded. * @param array $defaultTags Tags that should be created at construction. - * @param boolean $includeShared Whether to include tags for items shared with this user by others. + * + * since 20.0.0 $includeShared isn't used anymore */ - public function __construct(TagMapper $mapper, $user, $type, $defaultTags = [], $includeShared = false) { + public function __construct(TagMapper $mapper, $user, $type, $defaultTags = []) { $this->mapper = $mapper; $this->user = $user; $this->type = $type; - $this->includeShared = $includeShared; $this->owners = [$this->user]; - if ($this->includeShared) { - $this->owners = array_merge($this->owners, \OC\Share\Share::getSharedItemsOwners($this->user, $this->type, true)); - $this->backend = \OC\Share\Share::getBackend($this->type); - } $this->tags = $this->mapper->loadTags($this->owners, $this->type); if (count($defaultTags) > 0 && count($this->tags) === 0) { @@ -303,22 +299,7 @@ class Tags implements ITags { if (!is_null($result)) { while ($row = $result->fetchRow()) { - $id = (int)$row['objid']; - - if ($this->includeShared) { - // We have to check if we are really allowed to access the - // items that are tagged with $tag. To that end, we ask the - // corresponding sharing backend if the item identified by $id - // is owned by any of $this->owners. - foreach ($this->owners as $owner) { - if ($this->backend->isValidSource($id, $owner)) { - $ids[] = $id; - break; - } - } - } else { - $ids[] = $id; - } + $ids[] = (int)$row['objid']; } } diff --git a/lib/public/ITagManager.php b/lib/public/ITagManager.php index 46e1ba0629..9003beb8a2 100644 --- a/lib/public/ITagManager.php +++ b/lib/public/ITagManager.php @@ -54,11 +54,11 @@ interface ITagManager { * @see \OCP\ITags * @param string $type The type identifier e.g. 'contact' or 'event'. * @param array $defaultTags An array of default tags to be used if none are stored. - * @param boolean $includeShared Whether to include tags for items shared with this user by others. + * @param boolean $includeShared Whether to include tags for items shared with this user by others. - always false since 20.0.0 * @param string $userId user for which to retrieve the tags, defaults to the currently * logged in user * @return \OCP\ITags - * @since 6.0.0 - parameter $includeShared and $userId were added in 8.0.0 + * @since 6.0.0 - parameter $includeShared and $userId were added in 8.0.0 - $includeShared is always false since 20.0.0 */ public function load($type, $defaultTags = [], $includeShared = false, $userId = null); } diff --git a/tests/lib/TagsTest.php b/tests/lib/TagsTest.php index 38d3d611bb..69c2833433 100644 --- a/tests/lib/TagsTest.php +++ b/tests/lib/TagsTest.php @@ -24,7 +24,6 @@ namespace Test; use OCP\IUser; use OCP\IUserSession; -use OCP\Share\IShare; /** * Class TagsTest @@ -287,39 +286,4 @@ class TagsTest extends \Test\TestCase { $this->assertTrue($tagger->removeFromFavorites(1)); $this->assertEquals([], $tagger->getFavorites()); } - - public function testShareTags() { - $testTag = 'TestTag'; - \OC\Share\Share::registerBackend('test', 'Test\Share\Backend'); - - $tagger = $this->tagMgr->load('test'); - $tagger->tagAs(1, $testTag); - - - $otherUserId = $this->getUniqueID('user2_'); - $otherUser = $this->createMock(IUser::class); - $otherUser->method('getUID') - ->willReturn($otherUserId); - - \OC::$server->getUserManager()->createUser($otherUserId, 'pass'); - \OC_User::setUserId($otherUserId); - $otherUserSession = $this->createMock(IUserSession::class); - $otherUserSession - ->expects($this->any()) - ->method('getUser') - ->willReturn($otherUser); - - $otherTagMgr = new \OC\TagManager($this->tagMapper, $otherUserSession); - $otherTagger = $otherTagMgr->load('test'); - $this->assertFalse($otherTagger->hasTag($testTag)); - - \OC_User::setUserId($this->user->getUID()); - // TODO new sharing - \OC\Share\Share::shareItem('test', 1, IShare::TYPE_USER, $otherUserId, \OCP\Constants::PERMISSION_READ); - - \OC_User::setUserId($otherUserId); - $otherTagger = $otherTagMgr->load('test', [], true); // Update tags, load shared ones. - $this->assertTrue($otherTagger->hasTag($testTag)); - $this->assertContains(1, $otherTagger->getIdsForTag($testTag)); - } }