'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; }