<?php // $Id$ function encode_pagename_for_wikizip ($pagename) { $enc = rawurlencode($pagename); // URL encode leading dot: $enc = preg_replace('/^\./', '%2e', $enc); return $enc; } function MailifyPage ($pagehash, $oldpagehash = false) { global $SERVER_ADMIN, $ArchivePageStore; $from = isset($SERVER_ADMIN) ? $SERVER_ADMIN : 'foo@bar'; $head = "From $from " . ctime(time()) . "\r\n"; $head .= "Subject: " . encode_pagename_for_wikizip($pagehash['pagename']) . "\r\n"; $head .= "From: $from (PhpWiki)\r\n"; $head .= "Date: " . rfc1123date($pagehash['lastmodified']) . "\r\n"; $head .= "Mime-Version: 1.0 (Produced by PhpWiki 1.1.x)\r\n"; if (is_array($oldpagehash)) { return $head . MimeMultipart(array(MimeifyPage($oldpagehash), MimeifyPage($pagehash))); } return $head . MimeifyPage($pagehash); } /** * The main() function which generates a zip archive of a PhpWiki. * * If $include_archive is false, only the current version of each page * is included in the zip file; otherwise all archived versions are * included as well. */ function MakeWikiZip ($include_archive = false) { global $dbi, $WikiPageStore, $ArchivePageStore; $pages = GetAllWikiPageNames($dbi); $zipname = "wiki.zip"; if ($include_archive) { $zipname = "wikidb.zip"; } $zip = new ZipWriter("Created by PhpWiki", $zipname); for (reset($pages); $pagename = current($pages); next($pages)) { set_time_limit(30); // Reset watchdog. $pagehash = RetrievePage($dbi, $pagename, $WikiPageStore); if (! is_array($pagehash)) continue; if ($include_archive) $oldpagehash = RetrievePage($dbi, $pagename, $ArchivePageStore); else $oldpagehash = false; $attrib = array('mtime' => $pagehash['lastmodified'], 'is_ascii' => 1); if (($pagehash['flags'] & FLAG_PAGE_LOCKED) != 0) $attrib['write_protected'] = 1; $content = MailifyPage($pagehash, $oldpagehash); $zip->addRegularFile( encode_pagename_for_wikizip($pagehash['pagename']), $content, $attrib); } $zip->finish(); } if(defined('WIKI_ADMIN')) MakeWikiZip(($zip == 'all')); CloseDataBase($dbi); exit; ?>