123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- <?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();
- }
- }
|