ShareByMailProvider: getAccessList: return full list of recipients

Previously was returning only boolean true if the Node was shared
by email, or false if not. Now provides an array containing the
list of email share recipients.

Signed-off-by: Adam Serbinski <adam@serbinski.com>
This commit is contained in:
Adam Serbinski 2022-05-27 10:40:54 -04:00 committed by Adam Serbinski
parent 5ca6249f42
commit 26ae5e6dfb
3 changed files with 27 additions and 12 deletions

View file

@ -1098,18 +1098,26 @@ class ShareByMailProvider implements IShareProvider {
}
$qb = $this->dbConnection->getQueryBuilder();
$qb->select('share_with')
$qb->select('share_with', 'file_source')
->from('share')
->where($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_EMAIL)))
->andWhere($qb->expr()->in('file_source', $qb->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY)))
->andWhere($qb->expr()->orX(
$qb->expr()->eq('item_type', $qb->createNamedParameter('file')),
$qb->expr()->eq('item_type', $qb->createNamedParameter('folder'))
))
->setMaxResults(1);
));
$cursor = $qb->executeQuery();
$mail = $cursor->fetch() !== false;
$mail = array();
while ($row = $cursor->fetch()) {
if ($currentAccess === false) {
$mail[] = $row['share_with'];
} else {
$mail[$row['share_with']] = [
'node_id' => $row['file_source']
];
}
}
$cursor->closeCursor();
return ['public' => $mail];

View file

@ -1672,9 +1672,10 @@ class Manager implements IManager {
* |-folder2 (32)
* |-fileA (42)
*
* fileA is shared with user1 and user1@server1
* fileA is shared with user1 and user1@server1 and email1@maildomain1
* folder2 is shared with group2 (user4 is a member of group2)
* folder1 is shared with user2 (renamed to "folder (1)") and user2@server2
* and email2@maildomain2
*
* Then the access list to '/folder1/folder2/fileA' with $currentAccess is:
* [
@ -1688,7 +1689,10 @@ class Manager implements IManager {
* 'user2@server2' => ['node_id' => 23, 'token' => 'FooBaR'],
* ],
* public => bool
* mail => bool
* mail => [
* 'email1@maildomain1' => ['node_id' => 42],
* 'email2@maildomain2' => ['node_id' => 23],
* ]
* ]
*
* The access list to '/folder1/folder2/fileA' **without** $currentAccess is:
@ -1696,7 +1700,7 @@ class Manager implements IManager {
* users => ['user1', 'user2', 'user4'],
* remote => bool,
* public => bool
* mail => bool
* mail => ['email1@maildomain1', 'email2@maildomain2']
* ]
*
* This is required for encryption/activity
@ -1716,9 +1720,9 @@ class Manager implements IManager {
$owner = $owner->getUID();
if ($currentAccess) {
$al = ['users' => [], 'remote' => [], 'public' => false];
$al = ['users' => [], 'remote' => [], 'public' => false, 'mail' => []];
} else {
$al = ['users' => [], 'remote' => false, 'public' => false];
$al = ['users' => [], 'remote' => false, 'public' => false, 'mail' => []];
}
if (!$this->userManager->userExists($owner)) {
return $al;

View file

@ -256,9 +256,10 @@ interface IManager {
* |-folder2 (32)
* |-fileA (42)
*
* fileA is shared with user1 and user1@server1
* fileA is shared with user1 and user1@server1 email1@maildomain1
* folder2 is shared with group2 (user4 is a member of group2)
* folder1 is shared with user2 (renamed to "folder (1)") and user2@server2
* and email2@maildomain2
*
* Then the access list to '/folder1/folder2/fileA' with $currentAccess is:
* [
@ -272,7 +273,9 @@ interface IManager {
* 'user2@server2' => ['node_id' => 23, 'token' => 'FooBaR'],
* ],
* public => bool
* mail => bool
* mail => [
* 'email1@maildomain1' => ['node_id' => 42],
* 'email2@maildomain2' => ['node_id' => 23],
* ]
*
* The access list to '/folder1/folder2/fileA' **without** $currentAccess is:
@ -280,7 +283,7 @@ interface IManager {
* users => ['user1', 'user2', 'user4'],
* remote => bool,
* public => bool
* mail => bool
* mail => ['email1@maildomain1', 'email2@maildomain2']
* ]
*
* This is required for encryption/activity