|| (isset($vars['sort']) && (!preg_match("/^(time|tag|title)$/i", $vars['sort']))))
$query = "&type=". $type;
$query .= "&emb=". (preg_match("/[e]/i", $vars['opts']) ? 'y' : 'n');
$query .= "&own=". (preg_match("/[o]/i", $vars['opts']) ? 'n' : 'y');
$query .= "&sys=". (preg_match("/[p]/i", $vars['opts']) ? 'y' : 'n');
$query .= "&rlnk=". (preg_match("/[r]/i", $vars['opts']) ? 'y' : 'n');
$query .= "&sort=". ((isset($vars['sort'])) ? $vars['sort'] : 'tag');
$output .= '<a href="'. $this->Href('fileexport.xml'.$query, $this->tag, ) .'" title="'. FE_DOWNLOAD_LINK_TITLE. '">'. sprintf(FE_DOWNLOAD_LINK_TEXT, strtoupper($type)). '</a>';
# Exports part of the wiki content in various formats i18n strings
if (!defined('FE_ERROR_REQUEST_STRING')) define ('FE_ERROR_REQUEST_STRING', "Illegal request string, unable to export");
if (!defined('FE_ERROR_ARCHIVE_BUILD')) define ('FE_ERROR_ARCHIVE_BUILD', "Error building the archive file, unable to export");
function FEerror ($msg)
{
return ("<em class='error'>$msg</em><br />");
function FEpage_data (&$this, $tag, &$page_content)
{
pretend your are this page
unset ($this->config['includes']);
$page_content['raw'] = $this->page['body'];
prevent recursive calling
$page = preg_replace('/\{\{\s*fileexport\b(.*?)\}\}/', "[fileexport action, $1]", $this->page['body']);
$rendered_body = $this->Format($page, 'wakka');
if (function_exists('FNprint'))
{
$rendered_body .= FNprint($this, 'list', , $this->Href());
$page_content['body'] = $rendered_body;
function FEhtml (&$this, &$pages, &$key_order, $embed_css, $css_path, $remove_links, $save_tag, $save_page)
{
$root_url = $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
"<html><head><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' />\n";
if ($fcss = fopen($css_path, 'r'))
{
if (!($stylesheet = file_get_contents($css_path)))
else
{
$stylesheet = "<style type='text/css'>$stylesheet\n</style>";
else
$header .= ($embed_css ? $stylesheet :
) .'<title>'. $this->GetConfigValue('wakka_name') ."</title></head><body>\n";
$toc = ;
foreach ($pages as $tag => $mypage)
{
prepare mapping table for translation of intra-wiki links
$rep[] = '#'. $mypage['i'] .'$1';
$save_includes = $this->config['includes'];
foreach ($key_order as $tag => $val)
{
$pagedata = array();
FEpage_data($this, $tag, $pagedata);
$toc .= "<li><a href='#{$pages[$tag]['i']}'>". $pages[$tag]['title'] ."</a></li>\n";
preserve intra-wiki links
$pagedata['body'] = "<a name='". $pages[$tag]['i'] ."'></a>". preg_replace($pat, $rep, $pagedata['body']);
$pagedata['body'] = preg_replace("/href=\'\#(\d+)\#fn(\d+)/", "href='#fn$1_$2", $pagedata['body']);
$pagedata['body'] = preg_replace("/id=\'fn(\d+)/", "id='fn". $pages[$tag]['i']. "_$1", $pagedata['body']);
$pagedata['body'] = preg_replace("/href=\'\#(\d+)\#fnback(\d+)/", "href='#fnback$1_$2", $pagedata['body']);
$pagedata['body'] = preg_replace("/id=\'fnback(\d+)/", "id='fnback". $pages[$tag]['i']. "_$1", $pagedata['body']);
if requested, remove external links including tail
if ($remove_links)
{
$pagedata['body'] = preg_replace("/<\s*a[^>]+href=([\'\"])[^#][^>]*?\>(.*?)<\/a>/", "$2", $pagedata['body']);
$pagedata['body'] = preg_replace('/'.preg_quote($this->
GetConfigValue('external_link_tail'),'/').'/',
, $pagedata['body']);
$output .= $pagedata['body'] ."<hr />\n";
$output = $header ."<div class='page'><h2>". FE_TABLE_OF_CONTENTS. '</h2><ul>'. $toc .'</ul><hr />'. $output;
restore original values
$this->tag = $save_tag;
$this->page = $save_page;
$this->config['includes'] = $save_includes;
header('Content-Disposition: attachment; filename='. $file_name .'html');
echo '</div></body></html>';
function FExml (&$this, &$pages, &$key_order, $remove_links, $save_tag, $save_page)
{
$save_includes = $this->config['includes'];
foreach ($key_order as $tag => $val)
{
$output .= '<page tag="'. $tag .'" lastchange="'. strftime('%Y-%m-%dT%H:%M:%S', strtotime($mytab['lastchange'])) .'"><owner>'. $mytab['owner'] .'</owner>';
foreach (explode (' ', $mytab['cats']) as $mycat)
{
if ($mycat)
{
$output .= '<category>'. $mycat. '</category>';
}
$output .= '<title>'. utf8_encode(htmlspecialchars($mytab['title'], ENT_COMPAT, 'UTF-8')) .'</title>\n';
$pagedata = array();
FEpage_data($this, $tag, $pagedata);
$output .= '<raw_content>'. utf8_encode(htmlspecialchars($pagedata['raw'], ENT_COMPAT)) .".</raw_content>\n";
if requested, remove external links including tail
if ($remove_links)
{
$pagedata['body'] = preg_replace("/<\s*a[^>]+href=([\'\"])[^#][^>]*?\>(.*?)<\/a>/", "$2", $pagedata['body']);
$pagedata['body'] = preg_replace('/'.preg_quote($this->
GetConfigValue('external_link_tail'),'/').'/', , $pagedata['body']);
$output .= '<rendered_content>'.utf8_encode(htmlspecialchars($pagedata['body'], ENT_COMPAT, 'UTF-8')).".</rendered_content>";
$output .= '</wikka>';
restore original values
$this->tag = $save_tag;
$this->page = $save_page;
$this->config['includes'] = $save_includes;
header('Content-Disposition: attachment; filename='. $file_name .'xml');
$pages = array();
$error_msg = ;
if (isset($_GET['cats']))
$categories = preg_split("/_/i", $_GET['cats']);
if ((isset($_GET['own']) && !(preg_match("/^[YN]$/i", $_GET['own'])))
|| (isset($_GET['emb']) && (!preg_match("/^[YN]$/i", $_GET['emb'])))
|| (isset($_GET['rlnk']) && (!preg_match("/^[YN]$/i", $_GET['rlnk'])))
|| (isset($_GET['sys']) && (!preg_match("/^[YN]$/i", $_GET['sys'])))
|| (isset($_GET['type']) && (!preg_match("/^(html|xml)$/i", $_GET['type'])))
|| (isset($_GET['sort']) && (!preg_match("/^(time|tag|title)$/i", $_GET['sort']))))
{
$error_msg .= FEerror(FE_ERROR_REQUEST_STRING);
else
$embed_css = ('y'
strtolower($_GET['emb']));
$remove_links = ('y'
strtolower($_GET['rlnk']));
$query = 'SELECT * FROM '. $this->config['table_prefix']. 'pages WHERE ((latest = \'Y\')';
if ('y'
strtolower($_GET['own']))
{
{
if ($categories[0])
{
$query .= " AND (body REGEXP 'Category[A-Z0-9ÄÖÜ][A-Za-z0-9ÄÖÜßäöü]*:>:')";
$query .= ')';
foreach ($rows as $row)
{
if ($categories[0])
{
$match = false;
foreach ($categories as $mycat)
{
if (preg_match("/\b$mycat\b/i", $row['body']))
{
else
{
$match = true;
sanitize categories
preg_match_all("/\b(Category[A-Z0-9ÄÖÜ][A-Za-z0-9ÄÖÜßäöü]*)\b/", $row['body'], $matches);
{
if ($match && $this->
HasAccess('read', $row['tag']))
{
fill the 'pages' associative array
$pages[$row['tag']]['cats'] = implode (' ', array_unique($itscats));
$pages[$row['tag']]['title'] = $this->
PageTitle();
if (isset($_GET['sort']))
{
if ($_GET['sort']
'time')
{
$field = 'ts'; $fn = 'arsort';
else if ($_GET['sort']
'title')
{
$field = 'title'; $fn= 'asort';
if (!$field)
{
$field = 'tag'; $fn = 'asort';
$key_order = array();
foreach ($pages as $tag => $mytab)
{
$key_order[$tag] = ($field
'tag') ? strtolower($tag) : strtolower($mytab[$field]);
$fn($key_order);
if (!isset($_GET['type']) || $_GET['type']
'html')
{
FEhtml ($this, $pages, $key_order, $embed_css, $css_path, $remove_links, $save_tag, $save_page);
else if ($_GET['type']
'xml')
{
FExml ($this, $pages, $key_order, $remove_links, $save_tag, $save_page);
if ($error_msg)
header('Content-type: text/xml');
$xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
$xml .= '<?xml-stylesheet href="' . $this->
GetConfigValue("base_url") .'/css/xml.css" type="text/css"?' .">\n";
$xml .= '<item><title>Error message</title>';
$xml .= '<description>'. $error_msg. '</description></item>';
print $xml;