OSDN Git Service

BugTrack/791: Fix typo 0,91 => 0.91
[pukiwiki/pukiwiki.git] / plugin / diff.inc.php
1 <?php
2 /////////////////////////////////////////////////
3 // PukiWiki - Yet another WikiWikiWeb clone.
4 //
5 // $Id: diff.inc.php,v 1.13 2004/10/31 05:21:47 henoheno Exp $
6 //
7
8 //¥Ú¡¼¥¸¤Îº¹Ê¬¤òɽ¼¨¤¹¤ë
9 function plugin_diff_action()
10 {
11         global $vars;
12
13         $page = isset($vars['page']) ? $vars['page'] : '';
14         check_readable($page, true, true);
15
16         $action = isset($vars['action']) ? $vars['action'] : '';
17         switch ($action) {
18                 case 'delete': $retval = plugin_diff_delete($page);     break;
19                 default:       $retval = plugin_diff_view($page);       break;
20         }
21         return $retval;
22 }
23
24 // º¹Ê¬¤òɽ¼¨
25 function plugin_diff_view($page)
26 {
27         global $script, $hr;
28         global $_msg_notfound, $_msg_goto, $_msg_deleted, $_msg_addline, $_msg_delline, $_title_diff;
29         global $_title_diff_delete;
30
31         $r_page = rawurlencode($page);
32         $s_page = htmlspecialchars($page);
33
34         $menu = array(
35                 "<li>$_msg_addline</li>",
36                 "<li>$_msg_delline</li>"
37         );
38
39         $is_page = is_page($page);
40         if ($is_page) {
41                 $menu[] = ' <li>' . str_replace('$1', "<a href=\"$script?$r_page\">$s_page</a>", $_msg_goto) . '</li>';
42         } else {
43                 $menu[] = ' <li>' . str_replace('$1', $s_page,$_msg_deleted) . '</li>';
44         }
45
46         $filename = DIFF_DIR . encode($page) . '.txt';
47         if (file_exists($filename)) {
48                 $diffdata = htmlspecialchars(join('', file($filename)));
49                 $diffdata = preg_replace('/^(\-)(.*)$/m', '<span class="diff_removed"> $2</span>', $diffdata);
50                 $diffdata = preg_replace('/^(\+)(.*)$/m', '<span class="diff_added"  > $2</span>', $diffdata);
51                 $menu[] = "<li><a href=\"$script?cmd=diff&amp;action=delete&amp;page=$r_page\">" .
52                         str_replace('$1', $s_page, $_title_diff_delete) . '</a></li>';
53                 $msg = "<pre>$diffdata</pre>\n";
54         }
55         else if ($is_page) {
56                 $diffdata = trim(htmlspecialchars(join('', get_source($page))));
57                 $msg = "<pre><span class=\"diff_added\">$diffdata</span></pre>\n";
58         }
59         else {
60                 return array('msg'=>$_title_diff, 'body'=>$_msg_notfound);
61         }
62
63         $menu = join("\n", $menu);
64         $body = <<<EOD
65 <ul>
66 $menu
67 </ul>
68 $hr
69 EOD;
70
71         return array('msg'=>$_title_diff, 'body'=>$body . $msg);
72 }
73
74 // ¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºï½ü
75 function plugin_diff_delete($page)
76 {
77         global $script, $vars;
78         global $_title_diff_delete, $_msg_diff_deleted;
79         global $_msg_diff_adminpass, $_btn_delete, $_msg_invalidpass;
80
81         $filename = DIFF_DIR . encode($page) . '.txt';
82         $body = '';
83         if (! is_pagename($page))     $body = "Invalid page name";
84         if (! file_exists($filename)) $body = make_pagelink($page) . "'s diff seems not found";
85         if ($body) return array('msg'=>$_title_diff_delete, 'body'=>$body);
86
87         if (isset($vars['pass'])) {
88                 if (pkwk_login($vars['pass'])) {
89                         unlink($filename);
90                         return array(
91                                 'msg'  => $_title_diff_delete,
92                                 'body' => str_replace('$1', make_pagelink($page), $_msg_diff_deleted)
93                         );
94                 } else {
95                         $body .= "<p><strong>$_msg_invalidpass</strong></p>\n";
96                 }
97         }
98
99         $s_page = htmlspecialchars($page);
100         $body .= <<<EOD
101 <p>$_msg_diff_adminpass</p>
102 <form action="$script" method="post">
103  <div>
104   <input type="hidden"   name="cmd"    value="diff" />
105   <input type="hidden"   name="page"   value="$s_page" />
106   <input type="hidden"   name="action" value="delete" />
107   <input type="password" name="pass"   size="12" />
108   <input type="submit"   name="ok"     value="$_btn_delete" />
109  </div>
110 </form>
111 EOD;
112
113         return array('msg'=>$_title_diff_delete, 'body'=>$body);
114 }
115 ?>