From b6727b4ebec42a79285fa7a6150e32a778972f5a Mon Sep 17 00:00:00 2001 From: Petr Kotek Date: Wed, 28 Sep 2016 21:04:13 +0200 Subject: [PATCH] Sabre\DAV\Server::generateMultiStatus: return a callback outputting the multi-status --- lib/DAV/Server.php | 53 +++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/lib/DAV/Server.php b/lib/DAV/Server.php index 6805ec0b01..b4995bb250 100644 --- a/lib/DAV/Server.php +++ b/lib/DAV/Server.php @@ -1645,42 +1645,43 @@ function getResourceTypeForNode(INode $node) { /** - * Generates a WebDAV propfind response body based on a list of nodes. + * Returns a callback generating a WebDAV propfind response body based on a list of nodes. * * If 'strip404s' is set to true, all 404 responses will be removed. * * @param array|\Traversable $fileProperties The list with nodes * @param bool $strip404s - * @return string + * @return callable */ function generateMultiStatus($fileProperties, $strip404s = false) { $w = $this->xml->getWriter(); - $w->openMemory(); - $w->contextUri = $this->baseUri; - $w->startDocument(); - - $w->startElement('{DAV:}multistatus'); - - foreach ($fileProperties as $entry) { - - $href = $entry['href']; - unset($entry['href']); - if ($strip404s) { - unset($entry[404]); + return function() use ($fileProperties, $strip404s, $w) { + $w->openUri('php://output'); + $w->contextUri = $this->baseUri; + $w->startDocument(); + + $w->startElement('{DAV:}multistatus'); + + foreach ($fileProperties as $entry) { + $href = $entry['href']; + unset($entry['href']); + if ($strip404s) { + unset($entry[404]); + } + $response = new Xml\Element\Response( + ltrim($href, '/'), + $entry + ); + $w->write([ + 'name' => '{DAV:}response', + 'value' => $response + ]); } - $response = new Xml\Element\Response( - ltrim($href, '/'), - $entry - ); - $w->write([ - 'name' => '{DAV:}response', - 'value' => $response - ]); - } - $w->endElement(); - - return $w->outputMemory(); + $w->endElement(); + $w->endDocument(); + $w->flush(); + }; }