diff options
Diffstat (limited to 'platform/www/inc/Action/Export.php')
-rw-r--r-- | platform/www/inc/Action/Export.php | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/platform/www/inc/Action/Export.php b/platform/www/inc/Action/Export.php new file mode 100644 index 0000000..6b46b27 --- /dev/null +++ b/platform/www/inc/Action/Export.php @@ -0,0 +1,113 @@ +<?php + +namespace dokuwiki\Action; + +use dokuwiki\Action\Exception\ActionAbort; +use dokuwiki\Extension\Event; + +/** + * Class Export + * + * Handle exporting by calling the appropriate renderer + * + * @package dokuwiki\Action + */ +class Export extends AbstractAction { + + /** @inheritdoc */ + public function minimumPermission() { + return AUTH_READ; + } + + /** + * Export a wiki page for various formats + * + * Triggers ACTION_EXPORT_POSTPROCESS + * + * Event data: + * data['id'] -- page id + * data['mode'] -- requested export mode + * data['headers'] -- export headers + * data['output'] -- export output + * + * @author Andreas Gohr <andi@splitbrain.org> + * @author Michael Klier <chi@chimeric.de> + * @inheritdoc + */ + public function preProcess() { + global $ID; + global $REV; + global $conf; + global $lang; + + $pre = ''; + $post = ''; + $headers = array(); + + // search engines: never cache exported docs! (Google only currently) + $headers['X-Robots-Tag'] = 'noindex'; + + $mode = substr($this->actionname, 7); + switch($mode) { + case 'raw': + $headers['Content-Type'] = 'text/plain; charset=utf-8'; + $headers['Content-Disposition'] = 'attachment; filename=' . noNS($ID) . '.txt'; + $output = rawWiki($ID, $REV); + break; + case 'xhtml': + $pre .= '<!DOCTYPE html>' . DOKU_LF; + $pre .= '<html lang="' . $conf['lang'] . '" dir="' . $lang['direction'] . '">' . DOKU_LF; + $pre .= '<head>' . DOKU_LF; + $pre .= ' <meta charset="utf-8" />' . DOKU_LF; // FIXME improve wrapper + $pre .= ' <title>' . $ID . '</title>' . DOKU_LF; + + // get metaheaders + ob_start(); + tpl_metaheaders(); + $pre .= ob_get_clean(); + + $pre .= '</head>' . DOKU_LF; + $pre .= '<body>' . DOKU_LF; + $pre .= '<div class="dokuwiki export">' . DOKU_LF; + + // get toc + $pre .= tpl_toc(true); + + $headers['Content-Type'] = 'text/html; charset=utf-8'; + $output = p_wiki_xhtml($ID, $REV, false); + + $post .= '</div>' . DOKU_LF; + $post .= '</body>' . DOKU_LF; + $post .= '</html>' . DOKU_LF; + break; + case 'xhtmlbody': + $headers['Content-Type'] = 'text/html; charset=utf-8'; + $output = p_wiki_xhtml($ID, $REV, false); + break; + default: + $output = p_cached_output(wikiFN($ID, $REV), $mode, $ID); + $headers = p_get_metadata($ID, "format $mode"); + break; + } + + // prepare event data + $data = array(); + $data['id'] = $ID; + $data['mode'] = $mode; + $data['headers'] = $headers; + $data['output'] =& $output; + + Event::createAndTrigger('ACTION_EXPORT_POSTPROCESS', $data); + + if(!empty($data['output'])) { + if(is_array($data['headers'])) foreach($data['headers'] as $key => $val) { + header("$key: $val"); + } + print $pre . $data['output'] . $post; + exit; + } + + throw new ActionAbort(); + } + +} |