--- pukiwiki/pukiwiki/plugin/diff.inc.php 2004/04/03 15:27:07 1.4 +++ pukiwiki/pukiwiki/plugin/diff.inc.php 2004/07/18 10:38:54 1.9 @@ -2,32 +2,30 @@ ///////////////////////////////////////////////// // PukiWiki - Yet another WikiWikiWeb clone. // -// $Id: diff.inc.php,v 1.4 2004/04/03 15:27:07 arino Exp $ +// $Id: diff.inc.php,v 1.9 2004/07/18 10:38:54 henoheno Exp $ // + //ページの差分を表示する function plugin_diff_action() { global $vars; - - check_readable($vars['page'],true,true); - - $action = array_key_exists('action',$vars) ? $vars['action'] : ''; - - switch ($vars['action']) { - case 'delete': - $retval = plugin_diff_delete($vars['page']); - break; - default: - $retval = plugin_diff_view($vars['page']); - break; + + $page = isset($vars['page']) ? $vars['page'] : ''; + check_readable($page, true, true); + + $action = isset($vars['action']) ? $vars['action'] : ''; + switch ($action) { + case 'delete': $retval = plugin_diff_delete($page); break; + default: $retval = plugin_diff_view($page); break; } return $retval; } + // 差分を表示 function plugin_diff_view($page) { - global $script,$hr; - global $_msg_notfound,$_msg_goto,$_msg_deleted,$_msg_addline,$_msg_delline,$_title_diff; + global $script, $hr; + global $_msg_notfound, $_msg_goto, $_msg_deleted, $_msg_addline, $_msg_delline, $_title_diff; global $_title_diff_delete; $r_page = rawurlencode($page); @@ -38,31 +36,31 @@ "
  • $_msg_delline
  • " ); - if (is_page($page)) { - $menu[] = "
  • ".str_replace('$1',"$s_page",$_msg_goto)."
  • "; + $is_page = is_page($page); + if ($is_page) { + $menu[] = '
  • ' . str_replace('$1', "$s_page", $_msg_goto) . '
  • '; } else { - $menu[] = "
  • ".str_replace('$1',$s_page,$_msg_deleted)."
  • "; + $menu[] = '
  • ' . str_replace('$1', $s_page,$_msg_deleted) . '
  • '; } - $delete_msg = ''; - $filename = DIFF_DIR.encode($page).'.txt'; + $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); - $menu[] = "
  • " . - str_replace('$1',$s_page,$_title_diff_delete) . '
  • '; + $diffdata = htmlspecialchars(join('', file($filename))); + $diffdata = preg_replace('/^(\-)(.*)$/m', ' $2', $diffdata); + $diffdata = preg_replace('/^(\+)(.*)$/m', ' $2', $diffdata); + $menu[] = "
  • " . + str_replace('$1', $s_page, $_title_diff_delete) . '
  • '; $msg = "
    $diffdata
    \n"; } - else if (is_page($page)) { - $diffdata = trim(htmlspecialchars(join('',get_source($page)))); + else if ($is_page) { + $diffdata = trim(htmlspecialchars(join('', get_source($page)))); $msg = "
    $diffdata
    \n"; } else { return array('msg'=>$_title_diff, 'body'=>$_msg_notfound); } - $menu = join("\n",$menu); + $menu = join("\n", $menu); $body = << $menu @@ -70,46 +68,50 @@ $hr EOD; - return array('msg'=>$_title_diff,'body'=>$body.$msg); + 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) - ); + global $script, $vars, $adminpass; + global $_title_diff_delete, $_msg_diff_deleted; + global $_msg_diff_adminpass, $_btn_delete, $_msg_invalidpass; + + $filename = DIFF_DIR . encode($page) . '.txt'; + $body = ''; + if (! is_pagename($page)) $body = "Invalid page name"; + if (! file_exists($filename)) $body = make_pagelink($page) . "'s diff seems not found"; + if ($body) return array('msg'=>$_title_diff_delete, 'body'=>$body); + + if (isset($vars['pass'])) { + if (pkwk_login($vars['pass'])) { + unlink($filename); + return array( + 'msg' => $_title_diff_delete, + 'body' => str_replace('$1', make_pagelink($page), $_msg_diff_deleted) + ); + } else { + $body .= "

    $_msg_invalidpass

    \n"; + } } - $body = ($pass === NULL) ? '' : "

    $_msg_invalidpass

    \n"; - $msg_delete = str_replace('$1',make_pagelink($page),$_msg_diff_delete); + $s_page = htmlspecialchars($page); $body .= <<$_msg_diff_adminpass

    - - - - - + + + + +
    EOD; - return array('msg'=>$_title_diff_delete,'body'=>$body); + + return array('msg'=>$_title_diff_delete, 'body'=>$body); } ?>