'HandlePrintGroup',
'pdfgroup'=>'HandlePrintGroup', 'pdfpage'=>'HandlePrintGroup',
'groupurls' => 'HandleGroupUrls',
));
SDVA($PrintGroup, array(
'outpdf' => true, # false to only store the PDF without sending to browser
'adminperms' => false,
'keeplatest' => 10,
'pdfbinary' => 'wkhtmltopdf', # path to wkhtmltopdf
'pdfargs' => '',
'datefmt' => '%Y%m%d_%H%M%S',
'customcss' => '',
'dir' => "$WorkDir/.printgroup",
'enableallpages' => true,
'keeptemphtml' => true,
# all pages from the wiki, from which to deduce the group names to export
'allgroupspattern' => '*.*,-PmWiki*.*,-Site.*,-SiteAdmin.*,-*.WikiSandbox',
# group pages to skip when exporting; HomePage and SideBar are
# automatically added at the top and will not be repeated
'pageskippattern' => '-*.RecentChanges,-*.GroupHeader,-*.GroupFooter,-*.GroupAttributes',
'GroupTemplate' => '
$WikiTitle | {$Group} / {$Title}
{GroupText}
',
'PageTemplate' => '
$[toc] $[top]
{$Title}
{PageText}
',
));
## (:redirect:)
Markup('redirect', '\\[\\[#([A-Za-z][-.:\\w]*))\\]\\]/',
"PrintGroup_Anchors");
function PrintGroup_Anchors($m) {
extract($GLOBALS['MarkupToHTML']);
$a = '_'.preg_replace('!^.*\\.!','', $pagename).'_'.$m[1];
if(! TrackAnchors($a)) return Keep("", 'L');
else return '';
}
function HandlePrintGroup($pagename, $auth="read"){
global $PrintGroup, $FmtPV, $Now, $LinkFunctions, $Charset, $action, $EnableRedirect, $DefaultPasswords;
ob_start(); # errors/warnings
$EnableRedirect = false;
if($PrintGroup['adminperms']) {
$rand = mt_rand(100000, 999999);
$DefaultPasswords['admin'] = pmcrypt($rand);
$_POST['authpw'] = $rand;
}
list($Group, $Name) = explode('.', $pagename);
$date = strftime($PrintGroup['datefmt'], $Now);
$HomePage = MakePageName($pagename, "$Group.");
$RecentChanges = MakePageName($pagename, "$Group.RecentChanges");
$SideBar = MakePageName($pagename, "$Group.SideBar");
if($action == "pdfpage") {
$pagelist = array($pagename);
$fname = "$pagename-$date";
$delpattern = "$pagename-*";
}
else {
$fname = "$Group-$date";
$delpattern = "$Group-*";
$LinkFunctions['<:page>'] = 'LinkPagePrintGroup';
$list = ListPages("$Group.*,-$HomePage,-$SideBar,{$PrintGroup['pageskippattern']}");
sort($list);
$pagelist = array($HomePage, $SideBar);
foreach($list as $pn) $pagelist[] = $pn;
}
$HTML = "";
$count = 0;
foreach($pagelist as $pn) {
$page = RetrieveAuthPage($pn, 'read', 0, READPAGE_CURRENT);
if(!$page) continue;
$text = @$page['text'];
$template = FmtPageName($PrintGroup['PageTemplate'], $pn);
if($pn == $SideBar && $PrintGroup['enableallpages']) {
$text .= "
>>pg_allpages<<
* '''[[{$HomePage}|+]]'''
";
foreach($list as $n) { $text .= "* [[$n|+]]\n"; }
$text .= ">><<\n";
}
$html = MarkupToHTML($pn, $text);
$HTML .= str_replace('{PageText}', $html, $template);
}
$template = FmtPageName($PrintGroup['GroupTemplate'], $HomePage);
$template = str_replace('/*customcss*/', $PrintGroup['customcss'], $template);
$HTML = str_replace('{GroupText}', $HTML, $template);
mkdirp($PrintGroup['dir']);
if(!file_exists("{$PrintGroup['dir']}/.htaccess"))
file_put_contents("{$PrintGroup['dir']}/.htaccess", "Order Deny,Allow\nDeny from all\n");
$tmpname = "{$PrintGroup['dir']}/$fname.html";
$pdfname = "{$PrintGroup['dir']}/$fname.pdf";
file_put_contents($tmpname, $HTML);
fixperms($tmpname);
PrintGroupDelOld("$delpattern.html");
if($action == 'printgroup') {
ob_end_clean();
header("Content-type: text/html;");
header("Content-disposition: inline; filename=\"$tmpname\"");
header("Content-length: ".filesize($tmpname));
readfile($tmpname);
exit;
}
$exec = "{$PrintGroup['pdfbinary']} -q --load-error-handling ignore --encoding $Charset {$PrintGroup['pdfargs']} $tmpname $pdfname";
// xmp($exec, 1);
exec($exec, $output, $return);
clearstatcache();
if(! file_exists($pdfname)) Abort("$pdfname doesn't exist!");
fixperms($pdfname);
if(! $PrintGroup['keeptemphtml']) unlink($tmpname);
PrintGroupDelOld("$delpattern.pdf");
if($PrintGroup['outpdf']) {
ob_end_clean();
header("Content-type: application/pdf;");
header("Content-disposition: attachment; filename=\"$fname.pdf\"");
header("Content-length: ".filesize($pdfname));
readfile($pdfname);
}
else Redirect($pagename);
exit;
}
function PrintGroupDelOld($pattern) {
global $PrintGroup;
$kl = $PrintGroup['keeplatest'];
$d = $PrintGroup['dir'];
if($kl && $kl>0) {
$files = array();
foreach(glob("$d/$pattern") as $f) {
$files[$f] = filemtime($f);
}
arsort($files);
$files = array_keys($files);
for($i=$kl; $i".str_replace("$", "$", $txt)."" : '';
}
if (!preg_match("/^\\s*([^#?]+)($QueryFragPattern)?$/",$path,$match))
return '';
$tgtname = MakePageName($pagename, $match[1]);
if (!$tgtname) return '';
$qf = @$match[2];
if (!$fmt) {
if (!PageExists($tgtname) && !preg_match('/[&?]action=/', $qf))
$fmt = preg_match('/\\s/', $txt)
? $LinkPageCreateSpaceFmt : $LinkPageCreateFmt;
else
$fmt = ($tgtname == $pagename && $qf == '')
? $LinkPageSelfFmt : $LinkPageExistsFmt;
}
list($g, $n) = explode('.', $tgtname);
if($G==$g && PageExists($tgtname)){
$url = "#_$n";
if(@$qf[0] == '#') { $url .= "_" . substr($qf, 1); $qf = ""; }
}
else { # other group, or page doesn't exist
$fmt = $UrlLinkFmt;
$url = PageVar($tgtname, '$PageUrl');
}
if (trim($txt) == '+') $txt = PageVar($tgtname, '$Titlespaced');
$txt = str_replace("$", "$", $txt);
$fmt = str_replace(array('$LinkUrl', '$LinkText', '$LinkAlt'),
array($url.PUE($qf), $txt, $alt), $fmt);
return FmtPageName($fmt,$tgtname);
}
function HandleGroupUrls($pagename) {
global $PrintGroup;
$list = ListPages($PrintGroup['allgroupspattern']);
sort($list);
$groups = array();
foreach($list as $pn) {
list($g, $p) = explode('.', $pn);
@$groups[$g]++;
}
$groups = array_keys($groups);
$out = "";
$naction = ($_REQUEST['out'] == 'html') ? 'printgroup' : 'pdfgroup';
foreach($groups as $g) {
$pn = MakePageName("$g.1", "$g.");
$out .= PageVar($pn, '$PageUrl') . "?action=$naction\r\n";
}
header("Content-Type: text/plain");
echo $out;
exit;
}