--- 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); +} ?>