X-Git-Url: https://git.cweiske.de/grauphel.git/blobdiff_plain/0c9b45d210a5d94b3ba219e32b73233a5a795f61..81554f1309cc6a80578100b9583a591012df0d43:/controller/notescontroller.php diff --git a/controller/notescontroller.php b/controller/notescontroller.php index 02bfc93..893a100 100644 --- a/controller/notescontroller.php +++ b/controller/notescontroller.php @@ -47,6 +47,100 @@ class NotesController extends Controller header('HTTP/1.0 500 Internal Server Error'); } + /** + * Output a note as a standalone HTML file + * + * @NoAdminRequired + * @NoCSRFRequired + */ + public function html($guid) + { + $note = $this->getNotes()->load($guid, false); + if ($note === null) { + $res = new ErrorResponse('Note does not exist'); + $res->setStatus(\OCP\AppFramework\Http::STATUS_NOT_FOUND); + return $res; + } + + $xw = new \XMLWriter(); + $xw->openMemory(); + $xw->setIndent(true); + $xw->setIndentString(' '); + $xw->startDocument('1.0', 'utf-8'); + $xw->writeRaw( + '' + . "\n" + ); + + $xw->startElementNS(null, 'html', 'http://www.w3.org/1999/xhtml'); + + //head + $xw->startElement('head'); + $xw->writeElement('title', $note->title); + + $xw->startElement('meta'); + $xw->writeAttribute('name', 'author'); + $xw->writeAttribute('content', $this->user->getDisplayName()); + $xw->endElement(); + + $xw->startElement('meta'); + $xw->writeAttribute('http-equiv', 'Content-Type'); + $xw->writeAttribute('content', 'text/html; charset=utf-8'); + $xw->endElement(); + + $xw->startElement('link'); + $xw->writeAttribute('rel', 'schema.DC'); + $xw->writeAttribute('href', 'http://purl.org/dc/elements/1.1/'); + $xw->endElement(); + + $xw->startElement('meta'); + $xw->writeAttribute('name', 'DC.date.created'); + $xw->writeAttribute( + 'content', date('c', strtotime($note->{'create-date'})) + ); + $xw->endElement(); + + $xw->startElement('meta'); + $xw->writeAttribute('name', 'DC.date.modified'); + $xw->writeAttribute( + 'content', date('c', strtotime($note->{'last-change-date'})) + ); + $xw->endElement(); + + $xw->endElement();//head + + //body + $xw->startElement('body'); + + $xw->writeElement('h1', $note->title); + + $converter = new \OCA\Grauphel\Converter\CleanHtml(); + $converter->internalLinkHandler = array($this, 'htmlNoteLinkHandler'); + try { + $xw->writeRaw( + $converter->convert($note->{'note-content'}) + ); + } catch (\OCA\Grauphel\Converter\Exception $e) { + $res = new ErrorResponse( + 'Error converting note to HTML.' + . ' Please repport a bug to the grauphel developers.' + ); + $res->setStatus(\OCP\AppFramework\Http::STATUS_NOT_FOUND); + return $res; + } + + $xw->endElement();//body + + $xw->endElement();//html + return new \OCA\Grauphel\Response\XmlResponse($xw->outputMemory()); + } + + public function htmlNoteLinkHandler($noteTitle) + { + return urlencode($noteTitle) . '.html'; + } + /** * Output a note in tomboy XML format * @@ -58,6 +152,11 @@ class NotesController extends Controller public function xml($guid) { $note = $this->getNotes()->load($guid, false); + if ($note === null) { + $res = new ErrorResponse('Note does not exist'); + $res->setStatus(\OCP\AppFramework\Http::STATUS_NOT_FOUND); + return $res; + } $xw = new \XMLWriter(); $xw->openMemory();