From e20db42a0c51fd7f7d028852ef60d47dd71e4adc Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Wed, 29 Apr 2020 20:40:45 +0200 Subject: [PATCH] Tags.php and the old sharing mechanism The old sharing mechanism isn't working anymore, because it was replaced by Share 2.0. Also it was nowhere used so this removes the code paths and reduces complexity. Signed-off-by: Morris Jobke --- lib/private/Share/Share.php | 54 ------------------------------------- lib/private/TagManager.php | 4 ++- lib/private/Tags.php | 27 +++---------------- lib/public/ITagManager.php | 4 +-- tests/lib/TagsTest.php | 36 ------------------------- 5 files changed, 9 insertions(+), 116 deletions(-) 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)); - } }