114 lines
3.3 KiB
PHP
114 lines
3.3 KiB
PHP
<?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();
|
|
}
|
|
|
|
}
|