diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2015-12-03 09:24:54 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2015-12-03 09:24:54 +0100 |
commit | a5c80ba8bc689a67adb8fda7eba31892c3e254f9 (patch) | |
tree | 3d077835c2f2bc88ea13726b0f1029129e97d948 | |
parent | 7fefd4f4d900de85201dafd9848f1212d4f6176d (diff) | |
parent | 0062888aafcad14d574787d985cf6780356137cc (diff) | |
download | nextcloud-server-a5c80ba8bc689a67adb8fda7eba31892c3e254f9.tar.gz nextcloud-server-a5c80ba8bc689a67adb8fda7eba31892c3e254f9.zip |
Merge pull request #20894 from owncloud/post-delete-meta-view
Also add metadata for postDelete hooks triggered from the view
-rw-r--r-- | lib/private/files/node/hookconnector.php | 19 | ||||
-rw-r--r-- | tests/lib/files/node/hookconnector.php | 22 |
2 files changed, 37 insertions, 4 deletions
diff --git a/lib/private/files/node/hookconnector.php b/lib/private/files/node/hookconnector.php index c42a329d319..360aaafdd71 100644 --- a/lib/private/files/node/hookconnector.php +++ b/lib/private/files/node/hookconnector.php @@ -21,9 +21,9 @@ namespace OC\Files\Node; +use OCP\Files\FileInfo; use OC\Files\Filesystem; use OC\Files\View; -use OCP\Files\FileInfo; use OCP\Util; class HookConnector { @@ -38,6 +38,11 @@ class HookConnector { private $view; /** + * @var FileInfo[] + */ + private $deleteMetaCache = []; + + /** * HookConnector constructor. * * @param Root $root @@ -90,11 +95,13 @@ class HookConnector { public function delete($arguments) { $node = $this->getNodeForPath($arguments['path']); + $this->deleteMetaCache[$node->getPath()] = $node->getFileInfo(); $this->root->emit('\OC\Files', 'preDelete', [$node]); } public function postDelete($arguments) { $node = $this->getNodeForPath($arguments['path']); + unset($this->deleteMetaCache[$node->getPath()]); $this->root->emit('\OC\Files', 'postDelete', [$node]); } @@ -135,11 +142,17 @@ class HookConnector { private function getNodeForPath($path) { $info = Filesystem::getView()->getFileInfo($path); if (!$info) { + $fullPath = Filesystem::getView()->getAbsolutePath($path); + if (isset($this->deleteMetaCache[$fullPath])) { + $info = $this->deleteMetaCache[$fullPath]; + } else { + $info = null; + } if (Filesystem::is_dir($path)) { - return new NonExistingFolder($this->root, $this->view, $fullPath); + return new NonExistingFolder($this->root, $this->view, $fullPath, $info); } else { - return new NonExistingFile($this->root, $this->view, $fullPath); + return new NonExistingFile($this->root, $this->view, $fullPath, $info); } } if ($info->getType() === FileInfo::TYPE_FILE) { diff --git a/tests/lib/files/node/hookconnector.php b/tests/lib/files/node/hookconnector.php index 646e3952a38..e2a5e190687 100644 --- a/tests/lib/files/node/hookconnector.php +++ b/tests/lib/files/node/hookconnector.php @@ -21,7 +21,7 @@ use Test\Traits\UserTrait; * Class HookConnector * * @group DB - * + * * @package Test\Files\Node */ class HookConnector extends TestCase { @@ -180,4 +180,24 @@ class HookConnector extends TestCase { $this->assertEquals('/' . $this->userId . '/files/source', $hookSourceNode->getPath()); $this->assertEquals('/' . $this->userId . '/files/target', $hookTargetNode->getPath()); } + + public function testPostDeleteMeta() { + $connector = new \OC\Files\Node\HookConnector($this->root, $this->view); + $connector->viewToNode(); + $hookCalled = false; + /** @var Node $hookNode */ + $hookNode = null; + + $this->root->listen('\OC\Files', 'postDelete', function ($node) use (&$hookNode, &$hookCalled) { + $hookCalled = true; + $hookNode = $node; + }); + + Filesystem::file_put_contents('test.txt', 'asd'); + $info = Filesystem::getFileInfo('test.txt'); + Filesystem::unlink('test.txt'); + + $this->assertTrue($hookCalled); + $this->assertEquals($hookNode->getId(), $info->getId()); + } } |