--- pukiwiki/pukiwiki/plugin/diff.inc.php 2003/06/22 06:37:18 1.3
+++ pukiwiki/pukiwiki/plugin/diff.inc.php 2004/04/03 15:27:07 1.4
@@ -2,50 +2,114 @@
/////////////////////////////////////////////////
// PukiWiki - Yet another WikiWikiWeb clone.
//
-// $Id: diff.inc.php,v 1.3 2003/06/22 06:37:18 arino Exp $
+// $Id: diff.inc.php,v 1.4 2004/04/03 15:27:07 arino Exp $
//
//ページの差分を表示する
function plugin_diff_action()
{
- global $script,$get,$hr;
- global $_msg_notfound,$_msg_goto,$_msg_addline,$_msg_delline,$_title_diff;
+ global $vars;
- check_readable($get['page'],true,true);
+ check_readable($vars['page'],true,true);
- $r_page = rawurlencode($get['page']);
- $s_page = htmlspecialchars($get['page']);
- $s_name = strip_bracket($s_page);
+ $action = array_key_exists('action',$vars) ? $vars['action'] : '';
- $msg = $_title_diff;
- $body = '';
-
- if (is_page($get['page'])) {
- $link = str_replace('$1',"$s_name",$_msg_goto);
- $body = <<
- $_msg_addline
- $_msg_delline
- $link
-
-$hr
-EOD;
+ switch ($vars['action']) {
+ case 'delete':
+ $retval = plugin_diff_delete($vars['page']);
+ break;
+ default:
+ $retval = plugin_diff_view($vars['page']);
+ break;
}
-
- if (file_exists(DIFF_DIR.encode($get['page']).'.txt')) {
- $diffdata = htmlspecialchars(join('',file(DIFF_DIR.encode($get['page']).'.txt')));
+ return $retval;
+}
+// 差分を表示
+function plugin_diff_view($page)
+{
+ global $script,$hr;
+ global $_msg_notfound,$_msg_goto,$_msg_deleted,$_msg_addline,$_msg_delline,$_title_diff;
+ global $_title_diff_delete;
+
+ $r_page = rawurlencode($page);
+ $s_page = htmlspecialchars($page);
+
+ $menu = array(
+ "$_msg_addline",
+ "$_msg_delline"
+ );
+
+ if (is_page($page)) {
+ $menu[] = " ".str_replace('$1',"$s_page",$_msg_goto)."";
+ } else {
+ $menu[] = " ".str_replace('$1',$s_page,$_msg_deleted)."";
+ }
+
+ $delete_msg = '';
+ $filename = DIFF_DIR.encode($page).'.txt';
+ if (file_exists($filename)) {
+ $diffdata = htmlspecialchars(join('',file($filename)));
$diffdata = preg_replace('/^(\-)(.*)$/m',' $2',$diffdata);
$diffdata = preg_replace('/^(\+)(.*)$/m',' $2',$diffdata);
- $body .= "$diffdata
\n";
+ $menu[] = "" .
+ str_replace('$1',$s_page,$_title_diff_delete) . '';
+ $msg = "$diffdata
\n";
}
- else if (is_page($get['page'])) {
- $diffdata = trim(htmlspecialchars(join('',get_source($get['page']))));
- $body .= "$diffdata
\n";
+ else if (is_page($page)) {
+ $diffdata = trim(htmlspecialchars(join('',get_source($page))));
+ $msg = "$diffdata
\n";
}
else {
- $title = $s_name;
- $body = $_msg_notfound;
+ return array('msg'=>$_title_diff, 'body'=>$_msg_notfound);
}
-
- return array('msg'=>$msg,'body'=>$body);
+
+ $menu = join("\n",$menu);
+ $body = <<
+$menu
+
+$hr
+EOD;
+
+ return array('msg'=>$_title_diff,'body'=>$body.$msg);
}
+// バックアップを削除
+function plugin_diff_delete($page)
+{
+ error_reporting(E_ALL);
+
+ global $script,$post,$adminpass;
+ global $_title_diff_delete,$_msg_diff_deleted,$_msg_diff_delete;
+ global $_msg_diff_adminpass,$_btn_delete,$_msg_invalidpass;
+
+ if (!is_pagename($page)) { return; }
+ $filename = DIFF_DIR.encode($page).'.txt';
+ if (!file_exists($filename)) { return; }
+
+ $s_page = htmlspecialchars($page);
+ $pass = array_key_exists('pass',$post) ? $post['pass'] : NULL;
+
+ if (md5($pass) == $adminpass) {
+ unlink($filename);
+ return array(
+ 'msg' => $_title_diff_delete,
+ 'body' => str_replace('$1',make_pagelink($page),$_msg_diff_deleted)
+ );
+ }
+ $body = ($pass === NULL) ? '' : "$_msg_invalidpass
\n";
+
+ $msg_delete = str_replace('$1',make_pagelink($page),$_msg_diff_delete);
+ $body .= <<$_msg_diff_adminpass
+
+EOD;
+ return array('msg'=>$_title_diff_delete,'body'=>$body);
+}
?>