on('beforeMethod:PUT', [$this, 'beforeMethod']); $this->server = $server; } /** * @throws NotFound a node expected to exist cannot be found */ public function beforeMethod(RequestInterface $request, ResponseInterface $response): bool { if ($request->getHeader('X-NC-WebDAV-Auto-Mkcol') !== '1') { return true; } [$path,] = uriSplit($request->getPath()); if ($this->server->tree->nodeExists($path)) { return true; } $parts = explode('/', trim($path, '/')); $rootPath = array_shift($parts); $node = $this->server->tree->getNodeForPath('/' . $rootPath); if (!($node instanceof ICollection)) { // the root node is not a collection, let SabreDAV handle it return true; } foreach ($parts as $part) { if (!$node->childExists($part)) { $node->createDirectory($part); } $node = $node->getChild($part); } return true; } }