mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2024-12-22 21:22:40 +00:00
Prototype XML output for Fever
This commit is contained in:
parent
98fc3f4940
commit
c783ec4357
1 changed files with 37 additions and 1 deletions
|
@ -21,6 +21,7 @@ use JKingWeb\Arsse\REST\Exception405;
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
use Psr\Http\Message\ResponseInterface;
|
use Psr\Http\Message\ResponseInterface;
|
||||||
use Zend\Diactoros\Response\JsonResponse;
|
use Zend\Diactoros\Response\JsonResponse;
|
||||||
|
use Zend\Diactoros\Response\XmlResponse;
|
||||||
use Zend\Diactoros\Response\EmptyResponse;
|
use Zend\Diactoros\Response\EmptyResponse;
|
||||||
|
|
||||||
class API extends \JKingWeb\Arsse\REST\AbstractHandler {
|
class API extends \JKingWeb\Arsse\REST\AbstractHandler {
|
||||||
|
@ -161,12 +162,47 @@ class API extends \JKingWeb\Arsse\REST\AbstractHandler {
|
||||||
|
|
||||||
protected function formatResponse(array $data, bool $xml): ResponseInterface {
|
protected function formatResponse(array $data, bool $xml): ResponseInterface {
|
||||||
if ($xml) {
|
if ($xml) {
|
||||||
throw \Exception("Not implemented yet");
|
$d = new \DOMDocument("1.0", "utf-8");
|
||||||
|
$d->appendChild($this->makeXMLAssoc($data, $d->createElement("response")));
|
||||||
|
return new XmlResponse($d->saveXML());
|
||||||
} else {
|
} else {
|
||||||
return new JsonResponse($data, 200, [], \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE);
|
return new JsonResponse($data, 200, [], \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function makeXMLAssoc(array $data, \DOMElement $p): \DOMElement {
|
||||||
|
$d = $p->ownerDocument;
|
||||||
|
foreach ($data as $k => $v) {
|
||||||
|
if (!is_array($v)) {
|
||||||
|
$p->appendChild($d->createElement($k, $v));
|
||||||
|
} elseif (isset($v[0])) {
|
||||||
|
// this is a very simplistic check for an indexed array
|
||||||
|
// it would not pass muster in the face of generic data,
|
||||||
|
// but we'll assume our code produces only well-ordered
|
||||||
|
// indexed arrays
|
||||||
|
$p->appendChild($this->makeXMLIndexed($v, $d->createElement($k), substr($k, 0, strlen($k) - 1)));
|
||||||
|
} else {
|
||||||
|
$p->appendChild($this->makeXMLAssoc($v, $d->createElement($k)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $p;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function makeXMLIndexed(array $data, \DOMElement $p, string $k): \DOMElement {
|
||||||
|
$d = $p->ownerDocument;
|
||||||
|
foreach ($data as $v) {
|
||||||
|
if (!is_array($v)) {
|
||||||
|
$p->appendChild($d->createElement($k, $v));
|
||||||
|
} elseif (isset($v[0])) {
|
||||||
|
$p->appendChild($this->makeXMLIndexed($v, $d->createElement($k), substr($k, 0, strlen($k) - 1)));
|
||||||
|
} else {
|
||||||
|
$p->appendChild($this->makeXMLAssoc($v, $d->createElement($k)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $p;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
protected function logIn(string $hash): bool {
|
protected function logIn(string $hash): bool {
|
||||||
// if HTTP authentication was successful and sessions are not enforced, proceed unconditionally
|
// if HTTP authentication was successful and sessions are not enforced, proceed unconditionally
|
||||||
if (isset(Arsse::$user->id) && !Arsse::$conf->userSessionEnforced) {
|
if (isset(Arsse::$user->id) && !Arsse::$conf->userSessionEnforced) {
|
||||||
|
|
Loading…
Reference in a new issue