OSDN Git Service

BugTrack2/372 Add auth group - set of multi users on page permission
[pukiwiki/pukiwiki.git] / plugin / diff.inc.php
1 <?php
2 // PukiWiki - Yet another WikiWikiWeb clone.
3 // $Id: diff.inc.php,v 1.20 2011/01/25 15:01:01 henoheno Exp $
4 // Copyright (C)
5 //   2002-2005 PukiWiki Developers Team
6 //   2002      Originally written by yu-ji
7 // License: GPL v2 or (at your option) any later version
8 //
9 // Showing colored-diff plugin
10
11 function plugin_diff_action()
12 {
13         global $vars;
14
15         $page = isset($vars['page']) ? $vars['page'] : '';
16         check_readable($page, true, true);
17
18         $action = isset($vars['action']) ? $vars['action'] : '';
19         switch ($action) {
20                 case 'delete': $retval = plugin_diff_delete($page);     break;
21                 default:       $retval = plugin_diff_view($page);       break;
22         }
23         return $retval;
24 }
25
26 function plugin_diff_view($page)
27 {
28         global $script, $hr;
29         global $_msg_notfound, $_msg_goto, $_msg_deleted, $_msg_addline, $_msg_delline, $_title_diff;
30         global $_title_diff_delete;
31
32         $r_page = pagename_urlencode($page);
33         $s_page = htmlsc($page);
34
35         $menu = array(
36                 '<li>' . $_msg_addline . '</li>',
37                 '<li>' . $_msg_delline . '</li>'
38         );
39
40         $is_page = is_page($page);
41         if ($is_page) {
42                 $menu[] = ' <li>' . str_replace('$1', '<a href="' . $script . '?' . $r_page . '">' .
43                         $s_page . '</a>', $_msg_goto) . '</li>';
44         } else {
45                 $menu[] = ' <li>' . str_replace('$1', $s_page, $_msg_deleted) . '</li>';
46         }
47
48         $filename = DIFF_DIR . encode($page) . '.txt';
49         if (file_exists($filename)) {
50                 if (! PKWK_READONLY) {
51                         $menu[] = '<li><a href="' . $script . '?cmd=diff&amp;action=delete&amp;page=' .
52                                 $r_page . '">' . str_replace('$1', $s_page, $_title_diff_delete) . '</a></li>';
53                 }
54                 $msg = '<pre>' . diff_style_to_css(htmlsc(join('', file($filename)))) . '</pre>' . "\n";
55         } else if ($is_page) {
56                 $diffdata = trim(htmlsc(join('', get_source($page))));
57                 $msg = '<pre><span class="diff_added">' . $diffdata . '</span></pre>' . "\n";
58         } else {
59                 return array('msg'=>$_title_diff, 'body'=>$_msg_notfound);
60         }
61
62         $menu = join("\n", $menu);
63         $body = <<<EOD
64 <ul>
65 $menu
66 </ul>
67 $hr
68 EOD;
69
70         return array('msg'=>$_title_diff, 'body'=>$body . $msg);
71 }
72
73 function plugin_diff_delete($page)
74 {
75         global $script, $vars;
76         global $_title_diff_delete, $_msg_diff_deleted;
77         global $_msg_diff_adminpass, $_btn_delete, $_msg_invalidpass;
78
79         $filename = DIFF_DIR . encode($page) . '.txt';
80         $body = '';
81         if (! is_pagename($page))     $body = 'Invalid page name';
82         if (! file_exists($filename)) $body = make_pagelink($page) . '\'s diff seems not found';
83         if ($body) return array('msg'=>$_title_diff_delete, 'body'=>$body);
84
85         if (isset($vars['pass'])) {
86                 if (pkwk_login($vars['pass'])) {
87                         unlink($filename);
88                         return array(
89                                 'msg'  => $_title_diff_delete,
90                                 'body' => str_replace('$1', make_pagelink($page), $_msg_diff_deleted)
91                         );
92                 } else {
93                         $body .= '<p><strong>' . $_msg_invalidpass . '</strong></p>' . "\n";
94                 }
95         }
96
97         $s_page = htmlsc($page);
98         $body .= <<<EOD
99 <p>$_msg_diff_adminpass</p>
100 <form action="$script" method="post">
101  <div>
102   <input type="hidden"   name="cmd"    value="diff" />
103   <input type="hidden"   name="page"   value="$s_page" />
104   <input type="hidden"   name="action" value="delete" />
105   <input type="password" name="pass"   size="12" />
106   <input type="submit"   name="ok"     value="$_btn_delete" />
107  </div>
108 </form>
109 EOD;
110
111         return array('msg'=>$_title_diff_delete, 'body'=>$body);
112 }
113