|
|
|
@ -25,6 +25,9 @@ declare(strict_types=1); |
|
|
|
namespace OCA\Talk\Files; |
|
|
|
|
|
|
|
use OCA\GroupFolders\Mount\GroupFolderStorage; |
|
|
|
use OCA\Files_Sharing\SharedStorage; |
|
|
|
use OCP\Files\Config\ICachedMountInfo; |
|
|
|
use OCP\Files\Config\IUserMountCache; |
|
|
|
use OCP\Files\FileInfo; |
|
|
|
use OCP\Files\IRootFolder; |
|
|
|
use OCP\Files\Node; |
|
|
|
@ -42,15 +45,19 @@ class Util { |
|
|
|
private $session; |
|
|
|
/** @var IShareManager */ |
|
|
|
private $shareManager; |
|
|
|
/** @var IUserMountCache */ |
|
|
|
private $userMountCache; |
|
|
|
/** @var array[] */ |
|
|
|
private $accessLists = []; |
|
|
|
|
|
|
|
public function __construct(IRootFolder $rootFolder, |
|
|
|
ISession $session, |
|
|
|
IShareManager $shareManager) { |
|
|
|
IShareManager $shareManager, |
|
|
|
IUserMountCache $userMountCache) { |
|
|
|
$this->rootFolder = $rootFolder; |
|
|
|
$this->session = $session; |
|
|
|
$this->shareManager = $shareManager; |
|
|
|
$this->userMountCache = $userMountCache; |
|
|
|
} |
|
|
|
|
|
|
|
public function getUsersWithAccessFile(string $fileId): array { |
|
|
|
@ -63,6 +70,16 @@ class Util { |
|
|
|
|
|
|
|
$node = array_shift($nodes); |
|
|
|
$accessList = $this->shareManager->getAccessList($node); |
|
|
|
if (!$node->getStorage()->instanceOfStorage(SharedStorage::class)) { |
|
|
|
// The file is not a shared file,
|
|
|
|
// let's check the accesslist for mount points of groupfolders and external storages
|
|
|
|
$mountsForFile = $this->userMountCache->getMountsForFileId($fileId); |
|
|
|
$affectedUserIds = array_map(function (ICachedMountInfo $mount) { |
|
|
|
return $mount->getUser()->getUID(); |
|
|
|
}, $mountsForFile); |
|
|
|
|
|
|
|
$accessList['users'] = array_unique(array_merge($affectedUserIds, $accessList['users'])); |
|
|
|
} |
|
|
|
|
|
|
|
$this->accessLists[$fileId] = $accessList['users']; |
|
|
|
} |
|
|
|
|