// PukiWiki - Yet another WikiWikiWeb clone.
// $Id: backup.php,v 1.5 2002/08/07 08:51:45 masui Exp $
/////////////////////////////////////////////////
// バックアップデータを作成する
function make_backup($filename,$body,$oldtime)
{
global $splitter,$cycle,$maxage;
$aryages = array();
$arystrout = array();
if(function_exists(gzfile))
$filename = str_replace(".txt",".gz",$filename);
$realfilename = BACKUP_DIR.$filename;
if(time() - @filemtime($realfilename) > (60 * 60 * $cycle))
{
$aryages = read_backup($filename);
if(count($aryages) >= $maxage)
{
array_shift($aryages);
}
foreach($aryages as $lines)
{
foreach($lines as $key => $line)
{
if($key && $key == "timestamp")
{
$arystrout[] = "$splitter " . rtrim($line);
}
else
{
$arystrout[] = rtrim($line);
}
}
}
$strout = join("\n",$arystrout);
if(!preg_match("/\n$/",$strout) && trim($strout)) $strout .= "\n";
$body = "$splitter " . $oldtime . "\n" . $body;
if(!preg_match("/\n$/",$body)) $body .= "\n";
$fp = backup_fopen($realfilename,"w");
if($fp===FALSE) die_message("cannot write file ".htmlspecialchars($realfilename)."
maybe permission is not writable or filename is too long");
backup_fputs($fp,$strout);
backup_fputs($fp,$body);
backup_fclose($fp);
}
return true;
}
// 特定の世代のバックアップデータを取得
function get_backup($age,$filename)
{
$aryages = read_backup($filename);
$retvars = array();
foreach($aryages as $key => $lines)
{
if($key != $age) continue;
foreach($lines as $key => $line)
{
if($key && $key == "timestamp") continue;
$retvars[] = $line;
}
}
return $retvars;
}
// バックアップ情報を返す
function get_backup_info($filename)
{
global $splitter;
$lines = array();
$retvars = array();
$lines = backup_file(BACKUP_DIR.$filename);
if(!is_array($lines)) return array();
$age = 0;
foreach($lines as $line)
{
preg_match("/^$splitter\s(\d+)$/",trim($line),$match);
if($match[1])
{
$age++;
$retvars[$age] = $match[1];
}
}
return $retvars;
}
// バックアップデータ全体を取得
function read_backup($filename)
{
global $splitter;
$lines = array();
$lines = backup_file(BACKUP_DIR.$filename);
if(!is_array($lines)) return array();
$age = 0;
foreach($lines as $line)
{
preg_match("/^$splitter\s(\d+)$/",trim($line),$match);
if($match[1])
{
$age++;
$retvars[$age]["timestamp"] = $match[1] . "\n";
}
else
{
$retvars[$age][] = $line;
}
}
return $retvars;
}
// バックアップ一覧の取得
function get_backup_list($_page="")
{
global $script,$date_format,$time_format,$weeklabels,$cantedit;
global $_msg_backuplist,$_msg_diff,$_msg_nowdiff,$_msg_source;
$ins_date = date($date_format,$val);
$ins_time = date($time_format,$val);
$ins_week = "(".$weeklabels[date("w",$val)].")";
$ins = "$ins_date $ins_week $ins_time";
if (($dir = @opendir(BACKUP_DIR)) && !$_page)
{
while($file = readdir($dir))
{
if(function_exists(gzopen))
$file = str_replace(".txt",".gz",$file);
if($file == ".." || $file == ".") continue;
$page = decode(trim(preg_replace("/(\.txt)|(\.gz)$/"," ",$file)));
if(in_array($page,$cantedit)) continue;
$page_url = rawurlencode($page);
$name = $page;
$name = strip_bracket($name);
if(is_page($page))
$vals[$name]["link"] = "