X-Git-Url: https://git.cweiske.de/grauphel.git/blobdiff_plain/e19fc06310e26dab3ec372fb01676a802fc02234..2f1ed90704ec3133afb15d39d537e79f1b9058c4:/controller/notescontroller.php?ds=sidebyside diff --git a/controller/notescontroller.php b/controller/notescontroller.php index 5618bcb..a54cfe3 100644 --- a/controller/notescontroller.php +++ b/controller/notescontroller.php @@ -47,6 +47,143 @@ 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', + htmlspecialchars_decode($note->title, ENT_QUOTES | ENT_HTML5) + ); + + $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', htmlspecialchars_decode($note->title, ENT_QUOTES | ENT_HTML5) + ); + + $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 report 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 as a standalone text file + * + * @NoAdminRequired + * @NoCSRFRequired + */ + public function text($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; + } + + $converter = new \OCA\Grauphel\Converter\ReStructuredText(); + $converter->internalLinkHandler = array($this, 'textNoteLinkHandler'); + try { + $title = htmlspecialchars_decode($note->title, ENT_QUOTES | ENT_HTML5); + $text = $title . "\n" + . str_repeat('*', strlen($title)) . "\n" + . "\n"; + $text .= $converter->convert($note->{'note-content'}); + return new \OCA\Grauphel\Response\TextResponse($text); + } catch (\OCA\Grauphel\Converter\Exception $e) { + $res = new ErrorResponse( + 'Error converting note to reStructuredText.' + . ' Please report a bug to the grauphel developers.' + ); + $res->setStatus(\OCP\AppFramework\Http::STATUS_NOT_FOUND); + return $res; + } + } + + public function textNoteLinkHandler($noteTitle) + { + return $noteTitle; + } + /** * Output a note in tomboy XML format *