$_title_backuplist, 'body'=>plugin_backup_get_list_all());
check_readable($page, true, true);
$s_page = htmlspecialchars($page);
$r_page = rawurlencode($page);
$action = isset($vars['action']) ? $vars['action'] : '';
if ($action == 'delete') return plugin_backup_delete($page);
$s_action = $r_action = '';
if ($action != '') {
$s_action = htmlspecialchars($action);
$r_action = rawurlencode($action);
}
$s_age = (isset($vars['age']) && is_numeric($vars['age'])) ? $vars['age'] : 0;
if ($s_age <= 0) return array( 'msg'=>$_title_pagebackuplist, 'body'=>plugin_backup_get_list($page));
$script = get_script_uri();
$body = '
' . "\n";
$body .= ' - ' . $_msg_backuplist . '
' ."\n";
$href = $script . '?cmd=backup&page=' . $r_page . '&age=' . $s_age;
$is_page = is_page($page);
if ($is_page && $action != 'diff')
$body .= ' - ' . str_replace('$1', '' . $_msg_diff . '',
$_msg_view) . '
' . "\n";
if ($is_page && $action != 'nowdiff')
$body .= ' - ' . str_replace('$1', '' . $_msg_nowdiff . '',
$_msg_view) . '
' . "\n";
if ($is_page && $action != 'visualdiff')
$body .= ' - ' . str_replace('$1', '' . $_msg_visualdiff . '',
$_msg_view) . '
' . "\n";
if ($action != 'source')
$body .= ' - ' . str_replace('$1', '' . $_msg_source . '',
$_msg_view) . '
' . "\n";
if (! PLUGIN_BACKUP_DISABLE_BACKUP_RENDERING && $action)
$body .= ' - ' . str_replace('$1', '' . $_msg_backup . '',
$_msg_view) . '
' . "\n";
if ($is_page) {
$body .= ' - ' . str_replace('$1',
'' . $s_page . '',
$_msg_goto) . "\n";
} else {
$body .= '
- ' . str_replace('$1', $s_page, $_msg_deleted) . "\n";
}
$backups = get_backup($page);
$backups_count = count($backups);
if ($s_age > $backups_count) $s_age = $backups_count;
if ($backups_count > 0 && $action != 'visualdiff') {
$body .= '
' . "\n";
foreach($backups as $age => $val) {
$date = format_date($val['time'], TRUE);
$body .= ($age == $s_age) ?
' - ' . $age . ' ' . $date . '
' . "\n" :
' - ' . $age . ' ' . $date . '
' . "\n";
}
$body .= '
' . "\n";
}
$body .= ' ' . "\n";
$body .= '
' . "\n";
if ($action == 'diff') {
$title = & $_title_backupdiff;
$old = ($s_age > 1) ? join('', $backups[$s_age - 1]['data']) : '';
$cur = join('', $backups[$s_age]['data']);
$body .= plugin_backup_diff(do_diff($old, $cur));
} else if ($s_action == 'nowdiff') {
$title = & $_title_backupnowdiff;
$old = join('', $backups[$s_age]['data']);
$cur = join('', get_source($page));
$body .= plugin_backup_diff(do_diff($old, $cur));
} else if ($s_action == 'visualdiff') {
$old = join('', $backups[$s_age]['data']);
$cur = join('', get_source($page));
$source = do_diff($old,$cur);
$source = plugin_backup_visualdiff($source);
$body .= "$hr\n" . drop_submit(convert_html($source));
$body = preg_replace('#\#spandel(.*?)(
)#si', '$1', $body);
$body = preg_replace('#\#spanadd(.*?)(
)#si', '$1', $body);
$body = preg_replace('#\#spanend(.*?)(
)#si', '$1', $body);
$body = preg_replace('#&spandel;#i', '', $body);
$body = preg_replace('#&spanadd;#i', '', $body);
$body = preg_replace('#&spanend;#i', '', $body);
$title = & $_title_backupnowdiff;
} else if ($s_action == 'source') {
$title = & $_title_backupsource;
$body .= '' . htmlspecialchars(join('', $backups[$s_age]['data'])) .
'' . "\n";
} else {
if (PLUGIN_BACKUP_DISABLE_BACKUP_RENDERING) {
die_message('This feature is prohibited');
} else {
$title = & $_title_backup;
$body .= $hr . "\n" .
drop_submit(convert_html($backups[$s_age]['data']));
}
}
return array('msg'=>str_replace('$2', $s_age, $title), 'body'=>$body);
}
// Delete backup
function plugin_backup_delete($page)
{
global $vars, $_title_backup_delete, $_title_pagebackuplist, $_msg_backup_deleted;
global $_msg_backup_adminpass, $_btn_delete, $_msg_invalidpass;
if (! _backup_file_exists($page))
return array('msg'=>$_title_pagebackuplist, 'body'=>plugin_backup_get_list($page)); // Say "is not found"
$body = '';
if (isset($vars['pass'])) {
if (pkwk_login($vars['pass'])) {
_backup_delete($page);
return array(
'msg' => $_title_backup_delete,
'body' => str_replace('$1', make_pagelink($page), $_msg_backup_deleted)
);
} else {
$body = '' . $_msg_invalidpass . '
' . "\n";
}
}
$script = get_script_uri();
$s_page = htmlspecialchars($page);
$body .= <<$_msg_backup_adminpass
EOD;
return array('msg'=>$_title_backup_delete, 'body'=>$body);
}
function plugin_backup_diff($str)
{
global $_msg_addline, $_msg_delline, $hr;
$ul = <<
$_msg_addline
$_msg_delline
EOD;
return $ul . '' . diff_style_to_css(htmlspecialchars($str)) . '
' . "\n";
}
function plugin_backup_get_list($page)
{
global $_msg_backuplist, $_msg_diff, $_msg_nowdiff, $_msg_source, $_msg_nobackup;
global $_title_backup_delete;
$script = get_script_uri();
$r_page = rawurlencode($page);
$s_page = htmlspecialchars($page);
$retval = array();
$retval[0] = <<
$_msg_backuplist
EOD;
$retval[1] = "\n";
$retval[2] = <<
EOD;
$backups = _backup_file_exists($page) ? get_backup($page) : array();
if (empty($backups)) {
$msg = str_replace('$1', make_pagelink($page), $_msg_nobackup);
$retval[1] .= ' ' . $msg . '' . "\n";
return join('', $retval);
}
if (! PKWK_READONLY) {
$retval[1] .= ' ';
$retval[1] .= str_replace('$1', $s_page, $_title_backup_delete);
$retval[1] .= '' . "\n";
}
$href = $script . '?cmd=backup&page=' . $r_page . '&age=';
$_anchor_from = $_anchor_to = '';
foreach ($backups as $age=>$data) {
if (! PLUGIN_BACKUP_DISABLE_BACKUP_RENDERING) {
$_anchor_from = '';
$_anchor_to = '';
}
$date = format_date($data['time'], TRUE);
$retval[1] .= <<$_anchor_from$age $date$_anchor_to
[ $_msg_diff
| $_msg_nowdiff
| $_msg_source
]
EOD;
}
return join('', $retval);
}
// List for all pages
function plugin_backup_get_list_all($withfilename = FALSE)
{
global $cantedit;
$pages = array_diff(get_existpages(BACKUP_DIR, BACKUP_EXT), $cantedit);
if (empty($pages)) {
return '';
} else {
return page_list($pages, 'backup', $withfilename);
}
}
// Plus! Extend -
function plugin_backup_visualdiff($str)
{
$str = preg_replace('/^(\x20)(.*)$/m', "\x08$2", $str);
$str = preg_replace('/^(\-)(\x20|#\x20|\-\-\-|\-\-|\-|\+\+\+|\+\+|\+|>|>>|>>>)(.*)$/m', "\x08$2&spandel;$3&spanend;", $str);
$str = preg_replace('/^(\+)(\x20|#\x20|\-\-\-|\-\-|\-|\+\+\+|\+\+|\+|>|>>|>>>)(.*)$/m', "\x08$2&spanadd;$3&spanend;", $str);
$str = preg_replace('/^(\-)(.*)$/m', "#spandel\n$2\n#spanend", $str);
$str = preg_replace('/^(\+)(.*)$/m', "#spanadd\n$2\n#spanend", $str);
$str = preg_replace('/^(\x08)(.*)$/m', '$2', $str);
$str = trim($str);
return $str;
}
// Plus! Extend - Create Combobox for Backup
function plugin_backup_convert()
{
global $script, $vars;
global $_msg_backuplist, $_msg_diff, $_msg_nowdiff, $_msg_source, $_msg_nobackup;
global $_title_backup_delete;
// Get arguments
$with_label = TRUE;
$args = func_get_args();
while (isset($args[0])) {
switch(array_shift($args)) {
case 'default' : $diff_mode = 0; break;
case 'nowdiff' : $diff_mode = 1; break;
case 'visualdiff' : $diff_mode = 2; break;
case 'label' : $with_label = TRUE; break;
case 'nolabel' : $with_label = FALSE; break;
}
}
$page = isset($vars['page']) ? $vars['page'] : '';
$r_page = rawurlencode($page);
$s_page = htmlspecialchars($page);
$retval = array();
$date = get_date("m/d", get_filetime($page));
if ($with_label) {
$retval[0] = <<
\n
EOD;
} else {
$retval[0] = <<
\n
EOD;
}
$backups = _backup_file_exists($page) ? get_backup($page) : array();
if (count($backups) == 0)
{
$retval[1] .= "\n";
return join('',$retval);
}
$maxcnt = count($backups) + 1;
$retval[1] .= "\n";
$backups = array_reverse($backups, True);
foreach ($backups as $age=>$data) {
$date = get_date("m/d", $data['time']);
$href = "$script?cmd=backup&page=$r_page&age=$age";
if ($diff_mode == 2) {
$retval[1] .= "\n";
} else if ($diff_mode == 1) {
$retval[1] .= "\n";
} else {
$retval[1] .= "\n";
}
}
return join('',$retval);
}
?>