|
|
|
@ -7,6 +7,7 @@ declare(strict_types=1); |
|
|
|
* |
|
|
|
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> |
|
|
|
* @author Christoph Wurst <christoph@winzerhof-wurst.at> |
|
|
|
* @author Jonas Meurer <jonas@freesources.org> |
|
|
|
* |
|
|
|
* @license GNU AGPL version 3 or any later version |
|
|
|
* |
|
|
|
@ -26,10 +27,12 @@ declare(strict_types=1); |
|
|
|
*/ |
|
|
|
namespace OCA\WorkflowEngine\Entity; |
|
|
|
|
|
|
|
use OC\Files\Config\UserMountCache; |
|
|
|
use OCP\EventDispatcher\Event; |
|
|
|
use OCP\EventDispatcher\GenericEvent; |
|
|
|
use OCP\Files\InvalidPathException; |
|
|
|
use OCP\Files\IRootFolder; |
|
|
|
use OCP\Files\Mount\IMountManager; |
|
|
|
use OCP\Files\Node; |
|
|
|
use OCP\Files\NotFoundException; |
|
|
|
use OCP\IL10N; |
|
|
|
@ -37,7 +40,6 @@ use OCP\IURLGenerator; |
|
|
|
use OCP\IUser; |
|
|
|
use OCP\IUserManager; |
|
|
|
use OCP\IUserSession; |
|
|
|
use OCP\Share\IManager as ShareManager; |
|
|
|
use OCP\SystemTag\ISystemTag; |
|
|
|
use OCP\SystemTag\ISystemTagManager; |
|
|
|
use OCP\SystemTag\MapperEvent; |
|
|
|
@ -62,8 +64,6 @@ class File implements IEntity, IDisplayText, IUrl, IIcon, IContextPortation { |
|
|
|
protected $eventName; |
|
|
|
/** @var Event */ |
|
|
|
protected $event; |
|
|
|
/** @var ShareManager */ |
|
|
|
private $shareManager; |
|
|
|
/** @var IUserSession */ |
|
|
|
private $userSession; |
|
|
|
/** @var ISystemTagManager */ |
|
|
|
@ -74,23 +74,29 @@ class File implements IEntity, IDisplayText, IUrl, IIcon, IContextPortation { |
|
|
|
private $actingUser = null; |
|
|
|
/** @var IUserManager */ |
|
|
|
private $userManager; |
|
|
|
/** @var UserMountCache */ |
|
|
|
private $userMountCache; |
|
|
|
/** @var IMountManager */ |
|
|
|
private $mountManager; |
|
|
|
|
|
|
|
public function __construct( |
|
|
|
IL10N $l10n, |
|
|
|
IURLGenerator $urlGenerator, |
|
|
|
IRootFolder $root, |
|
|
|
ShareManager $shareManager, |
|
|
|
IUserSession $userSession, |
|
|
|
ISystemTagManager $tagManager, |
|
|
|
IUserManager $userManager |
|
|
|
IUserManager $userManager, |
|
|
|
UserMountCache $userMountCache, |
|
|
|
IMountManager $mountManager |
|
|
|
) { |
|
|
|
$this->l10n = $l10n; |
|
|
|
$this->urlGenerator = $urlGenerator; |
|
|
|
$this->root = $root; |
|
|
|
$this->shareManager = $shareManager; |
|
|
|
$this->userSession = $userSession; |
|
|
|
$this->tagManager = $tagManager; |
|
|
|
$this->userManager = $userManager; |
|
|
|
$this->userMountCache = $userMountCache; |
|
|
|
$this->mountManager = $mountManager; |
|
|
|
} |
|
|
|
|
|
|
|
public function getName(): string { |
|
|
|
@ -135,8 +141,22 @@ class File implements IEntity, IDisplayText, IUrl, IIcon, IContextPortation { |
|
|
|
if ($node->getOwner()->getUID() === $uid) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
$acl = $this->shareManager->getAccessList($node, true, true); |
|
|
|
return isset($acl['users']) && array_key_exists($uid, $acl['users']); |
|
|
|
|
|
|
|
if ($this->eventName === self::EVENT_NAMESPACE . 'postDelete') { |
|
|
|
// At postDelete, the file no longer exists. Check for parent folder instead.
|
|
|
|
$fileId = $node->getParentId(); |
|
|
|
} else { |
|
|
|
$fileId = $node->getId(); |
|
|
|
} |
|
|
|
|
|
|
|
$mountInfos = $this->userMountCache->getMountsForFileId($fileId, $uid); |
|
|
|
foreach ($mountInfos as $mountInfo) { |
|
|
|
$mount = $this->mountManager->getMountFromMountInfo($mountInfo); |
|
|
|
if ($mount && $mount->getStorage() && !empty($mount->getStorage()->getCache()->get($fileId))) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
return false; |
|
|
|
} catch (NotFoundException $e) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|