mirror of https://github.com/nextcloud/server
chore: remove long depricated share code
Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
parent
c651e06a6d
commit
a598de627c
|
@ -29,65 +29,6 @@
|
|||
namespace OCA\Files_Sharing\ShareBackend;
|
||||
|
||||
class Folder extends File implements \OCP\Share_Backend_Collection {
|
||||
|
||||
/**
|
||||
* get shared parents
|
||||
*
|
||||
* @param int $itemSource item source ID
|
||||
* @param string $shareWith with whom should the item be shared
|
||||
* @param string $owner owner of the item
|
||||
* @return array with shares
|
||||
*/
|
||||
public function getParents($itemSource, $shareWith = null, $owner = null) {
|
||||
$result = [];
|
||||
$parent = $this->getParentId($itemSource);
|
||||
|
||||
$userManager = \OC::$server->getUserManager();
|
||||
|
||||
while ($parent) {
|
||||
$shares = \OCP\Share::getItemSharedWithUser('folder', $parent, $shareWith, $owner);
|
||||
if ($shares) {
|
||||
foreach ($shares as $share) {
|
||||
$name = basename($share['path']);
|
||||
$share['collection']['path'] = $name;
|
||||
$share['collection']['item_type'] = 'folder';
|
||||
$share['file_path'] = $name;
|
||||
|
||||
$ownerUser = $userManager->get($share['uid_owner']);
|
||||
$displayNameOwner = $ownerUser === null ? $share['uid_owner'] : $ownerUser->getDisplayName();
|
||||
$shareWithUser = $userManager->get($share['share_with']);
|
||||
$displayNameShareWith = $shareWithUser === null ? $share['share_with'] : $shareWithUser->getDisplayName();
|
||||
$share['displayname_owner'] = $displayNameOwner ? $displayNameOwner : $share['uid_owner'];
|
||||
$share['share_with_displayname'] = $displayNameShareWith ? $displayNameShareWith : $share['uid_owner'];
|
||||
|
||||
$result[] = $share;
|
||||
}
|
||||
}
|
||||
$parent = $this->getParentId($parent);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* get file cache ID of parent
|
||||
*
|
||||
* @param int $child file cache ID of child
|
||||
* @return mixed parent ID or null
|
||||
*/
|
||||
private function getParentId($child) {
|
||||
$qb = \OC::$server->getDatabaseConnection()->getQueryBuilder();
|
||||
$qb->select('parent')
|
||||
->from('filecache')
|
||||
->where(
|
||||
$qb->expr()->eq('fileid', $qb->createNamedParameter($child))
|
||||
);
|
||||
$result = $qb->execute();
|
||||
$row = $result->fetch();
|
||||
$result->closeCursor();
|
||||
return $row ? $row['parent'] : null;
|
||||
}
|
||||
|
||||
public function getChildren($itemSource) {
|
||||
$children = [];
|
||||
$parents = [$itemSource];
|
||||
|
|
|
@ -36,10 +36,6 @@
|
|||
namespace OC\Share;
|
||||
|
||||
use OCA\Files_Sharing\ShareBackend\File;
|
||||
use OCP\DB\Exception;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\Share\IShare;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
/**
|
||||
|
@ -93,107 +89,6 @@ class Share extends Constants {
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the item of item type shared with a given user by source
|
||||
*
|
||||
* @param string $itemType
|
||||
* @param string $itemSource
|
||||
* @param ?string $user User to whom the item was shared
|
||||
* @param ?string $owner Owner of the share
|
||||
* @param ?int $shareType only look for a specific share type
|
||||
* @return array Return list of items with file_target, permissions and expiration
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function getItemSharedWithUser(string $itemType, string $itemSource, ?string $user = null, ?string $owner = null, ?int $shareType = null) {
|
||||
$shares = [];
|
||||
$fileDependent = $itemType === 'file' || $itemType === 'folder';
|
||||
$qb = self::getSelectStatement(self::FORMAT_NONE, $fileDependent);
|
||||
$qb->from('share', 's');
|
||||
if ($fileDependent) {
|
||||
$qb->innerJoin('s', 'filecache', 'f', $qb->expr()->eq('file_source', 'f.fileid'));
|
||||
$qb->innerJoin('s', 'storages', 'st', $qb->expr()->eq('numeric_id', 'f.storage'));
|
||||
$column = 'file_source';
|
||||
} else {
|
||||
$column = 'item_source';
|
||||
}
|
||||
|
||||
$qb->where($qb->expr()->eq($column, $qb->createNamedParameter($itemSource)))
|
||||
->andWhere($qb->expr()->eq('item_type', $qb->createNamedParameter($itemType)));
|
||||
|
||||
// for link shares $user === null
|
||||
if ($user !== null) {
|
||||
$qb->andWhere($qb->expr()->eq('share_with', $qb->createNamedParameter($user)));
|
||||
}
|
||||
|
||||
if ($shareType !== null) {
|
||||
$qb->andWhere($qb->expr()->eq('share_type', $qb->createNamedParameter($shareType, IQueryBuilder::PARAM_INT)));
|
||||
}
|
||||
|
||||
if ($owner !== null) {
|
||||
$qb->andWhere($qb->expr()->eq('uid_owner', $qb->createNamedParameter($owner)));
|
||||
}
|
||||
|
||||
$result = $qb->executeQuery();
|
||||
while ($row = $result->fetch()) {
|
||||
if ($fileDependent && !self::isFileReachable($row['path'], $row['storage_id'])) {
|
||||
continue;
|
||||
}
|
||||
if ($fileDependent && (int)$row['file_parent'] === -1) {
|
||||
// if it is a mount point we need to get the path from the mount manager
|
||||
$mountManager = \OC\Files\Filesystem::getMountManager();
|
||||
$mountPoint = $mountManager->findByStorageId($row['storage_id']);
|
||||
if (!empty($mountPoint)) {
|
||||
$path = $mountPoint[0]->getMountPoint();
|
||||
$path = trim($path, '/');
|
||||
$path = substr($path, strlen($owner) + 1); //normalize path to 'files/foo.txt`
|
||||
$row['path'] = $path;
|
||||
} else {
|
||||
\OC::$server->get(LoggerInterface::class)->warning(
|
||||
'Could not resolve mount point for ' . $row['storage_id'],
|
||||
['app' => 'OCP\Share']
|
||||
);
|
||||
}
|
||||
}
|
||||
$shares[] = $row;
|
||||
}
|
||||
$result->closeCursor();
|
||||
|
||||
// if we didn't found a result then let's look for a group share.
|
||||
if (empty($shares) && $user !== null) {
|
||||
$userObject = \OC::$server->getUserManager()->get($user);
|
||||
$groups = [];
|
||||
if ($userObject) {
|
||||
$groups = \OC::$server->getGroupManager()->getUserGroupIds($userObject);
|
||||
}
|
||||
|
||||
if (!empty($groups)) {
|
||||
$qb = self::getSelectStatement(self::FORMAT_NONE, $fileDependent);
|
||||
$qb->from('share', 's');
|
||||
|
||||
if ($fileDependent) {
|
||||
$qb->innerJoin('s', 'filecache', 'f', $qb->expr()->eq('file_source', 'f.fileid'))
|
||||
->innerJoin('s', 'storages', 'st', $qb->expr()->eq('numeric_id', 'f.storage'));
|
||||
}
|
||||
|
||||
$qb->where($qb->expr()->eq($column, $qb->createNamedParameter($itemSource)))
|
||||
->andWhere($qb->expr()->eq('item_type', $qb->createNamedParameter($itemType, IQueryBuilder::PARAM_STR)))
|
||||
->andWhere($qb->expr()->in('share_with', $qb->createNamedParameter($groups, IQueryBuilder::PARAM_STR_ARRAY)));
|
||||
|
||||
if ($owner !== null) {
|
||||
$qb->andWhere($qb->expr()->eq('uid_owner', $qb->createNamedParameter($owner)));
|
||||
}
|
||||
$result = $qb->executeQuery();
|
||||
|
||||
while ($row = $result->fetch()) {
|
||||
$shares[] = $row;
|
||||
}
|
||||
$result->closeCursor();
|
||||
}
|
||||
}
|
||||
|
||||
return $shares;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the backend class for the specified item type
|
||||
*
|
||||
|
@ -287,185 +182,6 @@ class Share extends Constants {
|
|||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct select statement
|
||||
*
|
||||
* @param bool $fileDependent ist it a file/folder share or a general share
|
||||
*/
|
||||
private static function getSelectStatement(int $format, bool $fileDependent, ?string $uidOwner = null): IQueryBuilder {
|
||||
/** @var IDBConnection $connection */
|
||||
$connection = \OC::$server->get(IDBConnection::class);
|
||||
$qb = $connection->getQueryBuilder();
|
||||
if ($format == self::FORMAT_STATUSES) {
|
||||
if ($fileDependent) {
|
||||
return $qb->select(
|
||||
's.id',
|
||||
's.parent',
|
||||
'share_type',
|
||||
'path',
|
||||
'storage',
|
||||
'share_with',
|
||||
'uid_owner',
|
||||
'file_source',
|
||||
'stime',
|
||||
's.permissions',
|
||||
'uid_initiator'
|
||||
)->selectAlias('st.id', 'storage_id')
|
||||
->selectAlias('f.parent', 'file_parent');
|
||||
}
|
||||
return $qb->select('id', 'parent', 'share_type', 'share_with', 'uid_owner', 'item_source', 'stime', 's.permissions');
|
||||
}
|
||||
|
||||
if (isset($uidOwner)) {
|
||||
if ($fileDependent) {
|
||||
return $qb->select(
|
||||
's.id',
|
||||
'item_type',
|
||||
'item_source',
|
||||
's.parent',
|
||||
'share_type',
|
||||
'share_with',
|
||||
'file_source',
|
||||
'file_target',
|
||||
'path',
|
||||
's.permissions',
|
||||
'stime',
|
||||
'expiration',
|
||||
'token',
|
||||
'storage',
|
||||
'mail_send',
|
||||
'uid_owner',
|
||||
'uid_initiator'
|
||||
)->selectAlias('st.id', 'storage_id')
|
||||
->selectAlias('f.parent', 'file_parent');
|
||||
}
|
||||
return $qb->select('id', 'item_type', 'item_source', 'parent', 'share_type',
|
||||
'share_with', 'uid_owner', 'file_source', 'stime', 's.permissions',
|
||||
'expiration', 'token', 'mail_send');
|
||||
}
|
||||
|
||||
if ($fileDependent) {
|
||||
if ($format == File::FORMAT_GET_FOLDER_CONTENTS || $format == File::FORMAT_FILE_APP_ROOT) {
|
||||
return $qb->select(
|
||||
's.id',
|
||||
'item_type',
|
||||
'item_source',
|
||||
's.parent',
|
||||
'uid_owner',
|
||||
'share_type',
|
||||
'share_with',
|
||||
'file_source',
|
||||
'path',
|
||||
'file_target',
|
||||
's.permissions',
|
||||
'stime',
|
||||
'expiration',
|
||||
'storage',
|
||||
'name',
|
||||
'mtime',
|
||||
'mimepart',
|
||||
'size',
|
||||
'encrypted',
|
||||
'etag',
|
||||
'mail_send'
|
||||
)->selectAlias('f.parent', 'file_parent');
|
||||
}
|
||||
return $qb->select(
|
||||
's.id',
|
||||
'item_type',
|
||||
'item_source',
|
||||
'item_target',
|
||||
's.parent',
|
||||
'share_type',
|
||||
'share_with',
|
||||
'uid_owner',
|
||||
'file_source',
|
||||
'path',
|
||||
'file_target',
|
||||
's.permissions',
|
||||
'stime',
|
||||
'expiration',
|
||||
'token',
|
||||
'storage',
|
||||
'mail_send',
|
||||
)->selectAlias('f.parent', 'file_parent')
|
||||
->selectAlias('st.id', 'storage_id');
|
||||
}
|
||||
return $qb->select('*');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* transform db results
|
||||
*
|
||||
* @param array $row result
|
||||
*/
|
||||
private static function transformDBResults(&$row) {
|
||||
if (isset($row['id'])) {
|
||||
$row['id'] = (int)$row['id'];
|
||||
}
|
||||
if (isset($row['share_type'])) {
|
||||
$row['share_type'] = (int)$row['share_type'];
|
||||
}
|
||||
if (isset($row['parent'])) {
|
||||
$row['parent'] = (int)$row['parent'];
|
||||
}
|
||||
if (isset($row['file_parent'])) {
|
||||
$row['file_parent'] = (int)$row['file_parent'];
|
||||
}
|
||||
if (isset($row['file_source'])) {
|
||||
$row['file_source'] = (int)$row['file_source'];
|
||||
}
|
||||
if (isset($row['permissions'])) {
|
||||
$row['permissions'] = (int)$row['permissions'];
|
||||
}
|
||||
if (isset($row['storage'])) {
|
||||
$row['storage'] = (int)$row['storage'];
|
||||
}
|
||||
if (isset($row['stime'])) {
|
||||
$row['stime'] = (int)$row['stime'];
|
||||
}
|
||||
if (isset($row['expiration']) && $row['share_type'] !== IShare::TYPE_LINK) {
|
||||
// discard expiration date for non-link shares, which might have been
|
||||
// set by ancient bugs
|
||||
$row['expiration'] = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* format result
|
||||
*
|
||||
* @param array $items result
|
||||
* @param string $column is it a file share or a general share ('file_target' or 'item_target')
|
||||
* @param \OCP\Share_Backend $backend sharing backend
|
||||
* @param int $format
|
||||
* @param array $parameters additional format parameters
|
||||
* @return array format result
|
||||
*/
|
||||
private static function formatResult($items, $column, $backend, $format = self::FORMAT_NONE, $parameters = null) {
|
||||
if ($format === self::FORMAT_NONE) {
|
||||
return $items;
|
||||
} elseif ($format === self::FORMAT_STATUSES) {
|
||||
$statuses = [];
|
||||
foreach ($items as $item) {
|
||||
if ($item['share_type'] === IShare::TYPE_LINK) {
|
||||
if ($item['uid_initiator'] !== \OC::$server->getUserSession()->getUser()->getUID()) {
|
||||
continue;
|
||||
}
|
||||
$statuses[$item[$column]]['link'] = true;
|
||||
} elseif (!isset($statuses[$item[$column]])) {
|
||||
$statuses[$item[$column]]['link'] = false;
|
||||
}
|
||||
if (!empty($item['file_target'])) {
|
||||
$statuses[$item[$column]]['path'] = $item['path'];
|
||||
}
|
||||
}
|
||||
return $statuses;
|
||||
} else {
|
||||
return $backend->formatItems($items, $format, $parameters);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* remove protocol from URL
|
||||
*
|
||||
|
@ -489,29 +205,4 @@ class Share extends Constants {
|
|||
public static function getExpireInterval() {
|
||||
return (int)\OC::$server->getConfig()->getAppValue('core', 'shareapi_expire_after_n_days', '7');
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the given path is reachable for the given owner
|
||||
*
|
||||
* @param string $path path relative to files
|
||||
* @param string $ownerStorageId storage id of the owner
|
||||
*
|
||||
* @return boolean true if file is reachable, false otherwise
|
||||
*/
|
||||
private static function isFileReachable($path, $ownerStorageId) {
|
||||
// if outside the home storage, file is always considered reachable
|
||||
if (!(substr($ownerStorageId, 0, 6) === 'home::' ||
|
||||
substr($ownerStorageId, 0, 13) === 'object::user:'
|
||||
)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// if inside the home storage, the file has to be under "/files/"
|
||||
$path = ltrim($path, '/');
|
||||
if (substr($path, 0, 6) === 'files/') {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,8 +33,7 @@
|
|||
namespace OCP;
|
||||
|
||||
/**
|
||||
* This class provides the ability for apps to share their content between users.
|
||||
* Apps must create a backend class that implements OCP\Share_Backend and register it with this class.
|
||||
* This class remains only for use with the ::class namespace used for various hooks
|
||||
*
|
||||
* It provides the following hooks:
|
||||
* - post_shared
|
||||
|
@ -42,95 +41,4 @@ namespace OCP;
|
|||
* @deprecated 17.0.0
|
||||
*/
|
||||
class Share extends \OC\Share\Constants {
|
||||
/**
|
||||
* Get the item of item type shared with a given user by source
|
||||
* @param string $itemType
|
||||
* @param string $itemSource
|
||||
* @param string $user User to whom the item was shared
|
||||
* @param string $owner Owner of the share
|
||||
* @return array Return list of items with file_target, permissions and expiration
|
||||
* @since 6.0.0 - parameter $owner was added in 8.0.0
|
||||
* @deprecated 17.0.0
|
||||
*/
|
||||
public static function getItemSharedWithUser($itemType, $itemSource, $user, $owner = null) {
|
||||
return \OC\Share\Share::getItemSharedWithUser($itemType, $itemSource, $user, $owner);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the item of item type shared with the current user by source
|
||||
* @param string $itemType
|
||||
* @param string $itemSource
|
||||
* @param int $format (optional) Format type must be defined by the backend
|
||||
* @param mixed $parameters
|
||||
* @param bool $includeCollections
|
||||
* @return void
|
||||
* @since 5.0.0
|
||||
* @deprecated 17.0.0
|
||||
*/
|
||||
public static function getItemSharedWithBySource($itemType, $itemSource, $format = self::FORMAT_NONE,
|
||||
$parameters = null, $includeCollections = false) {
|
||||
// not used by any app - only here to not break apps syntax
|
||||
}
|
||||
|
||||
/**
|
||||
* Based on the given token the share information will be returned - password protected shares will be verified
|
||||
* @param string $token
|
||||
* @param bool $checkPasswordProtection
|
||||
* @return void
|
||||
* @since 5.0.0 - parameter $checkPasswordProtection was added in 7.0.0
|
||||
* @deprecated 17.0.0
|
||||
*/
|
||||
public static function getShareByToken($token, $checkPasswordProtection = true) {
|
||||
// not used by any app - only here to not break apps syntax
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the shared items of item type owned by the current user
|
||||
* @param string $itemType
|
||||
* @param int $format (optional) Format type must be defined by the backend
|
||||
* @param mixed $parameters
|
||||
* @param int $limit Number of items to return (optional) Returns all by default
|
||||
* @param bool $includeCollections
|
||||
* @return void
|
||||
* @since 5.0.0
|
||||
* @deprecated 17.0.0
|
||||
*/
|
||||
public static function getItemsShared($itemType, $format = self::FORMAT_NONE, $parameters = null,
|
||||
$limit = -1, $includeCollections = false) {
|
||||
// only used by AppVNCSafe app (https://github.com/vnc-biz/nextcloud-appvncsafe/issues/2) - only here to not break apps syntax
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the shared item of item type owned by the current user
|
||||
* @param string $itemType
|
||||
* @param string $itemSource
|
||||
* @param int $format (optional) Format type must be defined by the backend
|
||||
* @param mixed $parameters
|
||||
* @param bool $includeCollections
|
||||
* @return void
|
||||
* @since 5.0.0
|
||||
* @deprecated 17.0.0
|
||||
*
|
||||
* Refactoring notes:
|
||||
* * defacto $parameters and $format is always the default and therefore is removed in the subsequent call
|
||||
*/
|
||||
public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE,
|
||||
$parameters = null, $includeCollections = false) {
|
||||
// not used by any app - only here to not break apps syntax
|
||||
}
|
||||
|
||||
/**
|
||||
* sent status if users got informed by mail about share
|
||||
* @param string $itemType
|
||||
* @param string $itemSource
|
||||
* @param int $shareType SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK
|
||||
* @param string $recipient with whom was the item shared
|
||||
* @param bool $status
|
||||
* @since 6.0.0 - parameter $originIsSource was added in 8.0.0
|
||||
* @deprecated 17.0.0
|
||||
*/
|
||||
public static function setSendMailStatus($itemType, $itemSource, $shareType, $recipient, $status) {
|
||||
// not used by any app - only here to not break apps syntax
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,13 +22,11 @@
|
|||
namespace Test\Share;
|
||||
|
||||
use OC\Share\Share;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IGroup;
|
||||
use OCP\IGroupManager;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Share\IShare;
|
||||
|
||||
/**
|
||||
* Class Test_Share
|
||||
|
@ -127,110 +125,6 @@ class ShareTest extends \Test\TestCase {
|
|||
parent::tearDown();
|
||||
}
|
||||
|
||||
public function testGetItemSharedWithUser() {
|
||||
\OC_User::setUserId($this->user1->getUID());
|
||||
|
||||
// add dummy values to the share table
|
||||
$query = $this->connection->getQueryBuilder();
|
||||
$query->insert('share')
|
||||
->values([
|
||||
'item_type' => $query->createParameter('itemType'),
|
||||
'item_source' => $query->createParameter('itemSource'),
|
||||
'item_target' => $query->createParameter('itemTarget'),
|
||||
'share_type' => $query->createParameter('shareType'),
|
||||
'share_with' => $query->createParameter('shareWith'),
|
||||
'uid_owner' => $query->createParameter('uidOwner')
|
||||
]);
|
||||
$args = [
|
||||
['test', 99, 'target1', IShare::TYPE_USER, $this->user2->getUID(), $this->user1->getUID()],
|
||||
['test', 99, 'target2', IShare::TYPE_USER, $this->user4->getUID(), $this->user1->getUID()],
|
||||
['test', 99, 'target3', IShare::TYPE_USER, $this->user3->getUID(), $this->user2->getUID()],
|
||||
['test', 99, 'target4', IShare::TYPE_USER, $this->user3->getUID(), $this->user4->getUID()],
|
||||
['test', 99, 'target4', IShare::TYPE_USER, $this->user6->getUID(), $this->user4->getUID()],
|
||||
];
|
||||
foreach ($args as $row) {
|
||||
$query->setParameter('itemType', $row[0]);
|
||||
$query->setParameter('itemSource', $row[1], IQueryBuilder::PARAM_INT);
|
||||
$query->setParameter('itemTarget', $row[2]);
|
||||
$query->setParameter('shareType', $row[3], IQueryBuilder::PARAM_INT);
|
||||
$query->setParameter('shareWith', $row[4]);
|
||||
$query->setParameter('uidOwner', $row[5]);
|
||||
$query->executeStatement();
|
||||
}
|
||||
|
||||
$result1 = Share::getItemSharedWithUser('test', 99, $this->user2->getUID(), $this->user1->getUID());
|
||||
$this->assertSame(1, count($result1));
|
||||
$this->verifyResult($result1, ['target1']);
|
||||
|
||||
$result2 = Share::getItemSharedWithUser('test', 99, null, $this->user1->getUID());
|
||||
$this->assertSame(2, count($result2));
|
||||
$this->verifyResult($result2, ['target1', 'target2']);
|
||||
|
||||
$result3 = Share::getItemSharedWithUser('test', 99, $this->user3->getUID());
|
||||
$this->assertSame(2, count($result3));
|
||||
$this->verifyResult($result3, ['target3', 'target4']);
|
||||
|
||||
$result4 = Share::getItemSharedWithUser('test', 99, null, null);
|
||||
$this->assertSame(5, count($result4)); // 5 because target4 appears twice
|
||||
$this->verifyResult($result4, ['target1', 'target2', 'target3', 'target4']);
|
||||
|
||||
$result6 = Share::getItemSharedWithUser('test', 99, $this->user6->getUID(), null);
|
||||
$this->assertSame(1, count($result6));
|
||||
$this->verifyResult($result6, ['target4']);
|
||||
}
|
||||
|
||||
public function testGetItemSharedWithUserFromGroupShare() {
|
||||
\OC_User::setUserId($this->user1->getUID());
|
||||
|
||||
// add dummy values to the share table
|
||||
$query = $this->connection->getQueryBuilder();
|
||||
$query->insert('share')
|
||||
->values([
|
||||
'item_type' => $query->createParameter('itemType'),
|
||||
'item_source' => $query->createParameter('itemSource'),
|
||||
'item_target' => $query->createParameter('itemTarget'),
|
||||
'share_type' => $query->createParameter('shareType'),
|
||||
'share_with' => $query->createParameter('shareWith'),
|
||||
'uid_owner' => $query->createParameter('uidOwner')
|
||||
]);
|
||||
$args = [
|
||||
['test', 99, 'target1', IShare::TYPE_GROUP, $this->group1->getGID(), $this->user1->getUID()],
|
||||
['test', 99, 'target2', IShare::TYPE_GROUP, $this->group2->getGID(), $this->user1->getUID()],
|
||||
['test', 99, 'target3', IShare::TYPE_GROUP, $this->group1->getGID(), $this->user2->getUID()],
|
||||
['test', 99, 'target4', IShare::TYPE_GROUP, $this->group1->getGID(), $this->user4->getUID()],
|
||||
];
|
||||
foreach ($args as $row) {
|
||||
$query->setParameter('itemType', $row[0]);
|
||||
$query->setParameter('itemSource', $row[1], IQueryBuilder::PARAM_INT);
|
||||
$query->setParameter('itemTarget', $row[2]);
|
||||
$query->setParameter('shareType', $row[3], IQueryBuilder::PARAM_INT);
|
||||
$query->setParameter('shareWith', $row[4]);
|
||||
$query->setParameter('uidOwner', $row[5]);
|
||||
$query->executeStatement();
|
||||
}
|
||||
|
||||
// user2 is in group1 and group2
|
||||
$result1 = Share::getItemSharedWithUser('test', 99, $this->user2->getUID(), $this->user1->getUID());
|
||||
$this->assertSame(2, count($result1));
|
||||
$this->verifyResult($result1, ['target1', 'target2']);
|
||||
|
||||
$result2 = Share::getItemSharedWithUser('test', 99, null, $this->user1->getUID());
|
||||
$this->assertSame(2, count($result2));
|
||||
$this->verifyResult($result2, ['target1', 'target2']);
|
||||
|
||||
// user3 is in group1 and group2
|
||||
$result3 = Share::getItemSharedWithUser('test', 99, $this->user3->getUID());
|
||||
$this->assertSame(3, count($result3));
|
||||
$this->verifyResult($result3, ['target1', 'target3', 'target4']);
|
||||
|
||||
$result4 = Share::getItemSharedWithUser('test', 99, null, null);
|
||||
$this->assertSame(4, count($result4));
|
||||
$this->verifyResult($result4, ['target1', 'target2', 'target3', 'target4']);
|
||||
|
||||
$result6 = Share::getItemSharedWithUser('test', 99, $this->user6->getUID(), null);
|
||||
$this->assertSame(0, count($result6));
|
||||
}
|
||||
|
||||
public function verifyResult($result, $expected) {
|
||||
foreach ($result as $r) {
|
||||
if (in_array($r['item_target'], $expected)) {
|
||||
|
|
Loading…
Reference in New Issue