Merge pull request #16657 from owncloud/view-emit-path
emit hooks from a view as long as the path is inside the default root
This commit is contained in:
commit
ced15c44b4
|
@ -1081,7 +1081,8 @@ class View {
|
||||||
if ($this->fakeRoot === $defaultRoot) {
|
if ($this->fakeRoot === $defaultRoot) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return (strlen($this->fakeRoot) > strlen($defaultRoot)) && (substr($this->fakeRoot, 0, strlen($defaultRoot) + 1) === $defaultRoot . '/');
|
$fullPath = $this->getAbsolutePath($path);
|
||||||
|
return (strlen($fullPath) > strlen($defaultRoot)) && (substr($fullPath, 0, strlen($defaultRoot) + 1) === $defaultRoot . '/');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1091,10 +1092,11 @@ class View {
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
private function runHooks($hooks, $path, $post = false) {
|
private function runHooks($hooks, $path, $post = false) {
|
||||||
|
$relativePath = $path;
|
||||||
$path = $this->getHookPath($path);
|
$path = $this->getHookPath($path);
|
||||||
$prefix = ($post) ? 'post_' : '';
|
$prefix = ($post) ? 'post_' : '';
|
||||||
$run = true;
|
$run = true;
|
||||||
if ($this->shouldEmitHooks($path)) {
|
if ($this->shouldEmitHooks($relativePath)) {
|
||||||
foreach ($hooks as $hook) {
|
foreach ($hooks as $hook) {
|
||||||
if ($hook != 'read') {
|
if ($hook != 'read') {
|
||||||
\OC_Hook::emit(
|
\OC_Hook::emit(
|
||||||
|
|
|
@ -1230,4 +1230,33 @@ class View extends \Test\TestCase {
|
||||||
$this->assertFalse($this->isFileLocked($view, '/test//sub', ILockingProvider::LOCK_EXCLUSIVE));
|
$this->assertFalse($this->isFileLocked($view, '/test//sub', ILockingProvider::LOCK_EXCLUSIVE));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function hookPathProvider() {
|
||||||
|
return [
|
||||||
|
['/foo/files', '/foo', true],
|
||||||
|
['/foo/files/bar', '/foo', true],
|
||||||
|
['/foo', '/foo', false],
|
||||||
|
['/foo', '/files/foo', true],
|
||||||
|
['/foo', 'filesfoo', false]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider hookPathProvider
|
||||||
|
* @param $root
|
||||||
|
* @param $path
|
||||||
|
* @param $shouldEmit
|
||||||
|
*/
|
||||||
|
public function testHookPaths($root, $path, $shouldEmit) {
|
||||||
|
$filesystemReflection = new \ReflectionClass('\OC\Files\Filesystem');
|
||||||
|
$defaultRootValue = $filesystemReflection->getProperty('defaultInstance');
|
||||||
|
$defaultRootValue->setAccessible(true);
|
||||||
|
$oldRoot = $defaultRootValue->getValue();
|
||||||
|
$defaultView = new \OC\Files\View('/foo/files');
|
||||||
|
$defaultRootValue->setValue($defaultView);
|
||||||
|
$view = new \OC\Files\View($root);
|
||||||
|
$result = \Test_Helper::invokePrivate($view, 'shouldEmitHooks', [$path]);
|
||||||
|
$defaultRootValue->setValue($oldRoot);
|
||||||
|
$this->assertEquals($shouldEmit, $result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue