|
|
|
@ -22,6 +22,7 @@ |
|
|
|
*/ |
|
|
|
namespace OC\AppFramework\OCS; |
|
|
|
|
|
|
|
use OCP\AppFramework\Http; |
|
|
|
use OCP\AppFramework\Http\DataResponse; |
|
|
|
use OCP\AppFramework\Http\EmptyContentSecurityPolicy; |
|
|
|
use OCP\AppFramework\Http\Response; |
|
|
|
@ -85,9 +86,60 @@ abstract class BaseResponse extends Response { |
|
|
|
* @param string[] $meta |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
protected function renderResult($meta) { |
|
|
|
// TODO rewrite functions
|
|
|
|
return \OC_API::renderResult($this->format, $meta, $this->data); |
|
|
|
protected function renderResult(array $meta): string { |
|
|
|
$status = $this->getStatus(); |
|
|
|
if ($status === Http::STATUS_NO_CONTENT || |
|
|
|
$status === Http::STATUS_NOT_MODIFIED || |
|
|
|
($status >= 100 && $status <= 199)) { |
|
|
|
// Those status codes are not supposed to have a body:
|
|
|
|
// https://stackoverflow.com/q/8628725
|
|
|
|
return ''; |
|
|
|
} |
|
|
|
|
|
|
|
$response = [ |
|
|
|
'ocs' => [ |
|
|
|
'meta' => $meta, |
|
|
|
'data' => $this->data, |
|
|
|
], |
|
|
|
]; |
|
|
|
|
|
|
|
if ($this->format === 'json') { |
|
|
|
return json_encode($response, JSON_HEX_TAG); |
|
|
|
} |
|
|
|
|
|
|
|
$writer = new \XMLWriter(); |
|
|
|
$writer->openMemory(); |
|
|
|
$writer->setIndent(true); |
|
|
|
$writer->startDocument(); |
|
|
|
$this->toXML($response, $writer); |
|
|
|
$writer->endDocument(); |
|
|
|
return $writer->outputMemory(true); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @param array $array |
|
|
|
* @param \XMLWriter $writer |
|
|
|
*/ |
|
|
|
protected function toXML(array $array, \XMLWriter $writer) { |
|
|
|
foreach ($array as $k => $v) { |
|
|
|
if ($k[0] === '@') { |
|
|
|
$writer->writeAttribute(substr($k, 1), $v); |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
if (\is_numeric($k)) { |
|
|
|
$k = 'element'; |
|
|
|
} |
|
|
|
|
|
|
|
if (\is_array($v)) { |
|
|
|
$writer->startElement($k); |
|
|
|
$this->toXML($v, $writer); |
|
|
|
$writer->endElement(); |
|
|
|
} else { |
|
|
|
$writer->writeElement($k, $v); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function getOCSStatus() { |
|
|
|
|