OSDN Git Service

BugTrack/2436 ESLint - Linting utility for JavaScript
[pukiwiki/pukiwiki.git] / plugin / diff.inc.php
1 <?php
2 // PukiWiki - Yet another WikiWikiWeb clone.
3 // diff.inc.php
4 // Copyright
5 //   2002-2017 PukiWiki Development 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 $hr;
29         global $_msg_notfound, $_msg_goto, $_msg_deleted, $_msg_addline, $_msg_delline, $_title_diff;
30         global $_title_diff_delete;
31
32         $script = get_base_uri();
33         $r_page = pagename_urlencode($page);
34         $s_page = htmlsc($page);
35
36         $menu = array(
37                 '<li>' . $_msg_addline . '</li>',
38                 '<li>' . $_msg_delline . '</li>'
39         );
40
41         $is_page = is_page($page);
42         if ($is_page) {
43                 $menu[] = ' <li>' . str_replace('$1', '<a href="' . get_page_uri($page) . '">' .
44                         $s_page . '</a>', $_msg_goto) . '</li>';
45         } else {
46                 $menu[] = ' <li>' . str_replace('$1', $s_page, $_msg_deleted) . '</li>';
47         }
48
49         $filename = DIFF_DIR . encode($page) . '.txt';
50         if (file_exists($filename)) {
51                 if (! PKWK_READONLY) {
52                         $menu[] = '<li><a href="' . $script . '?cmd=diff&amp;action=delete&amp;page=' .
53                                 $r_page . '">' . str_replace('$1', $s_page, $_title_diff_delete) . '</a></li>';
54                 }
55                 $msg = '<pre>' . diff_style_to_css(htmlsc(join('', file($filename)))) . '</pre>' . "\n";
56         } else if ($is_page) {
57                 $diffdata = trim(htmlsc(join('', get_source($page))));
58                 $msg = '<pre><span class="diff_added">' . $diffdata . '</span></pre>' . "\n";
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 function plugin_diff_delete($page)
75 {
76         global $vars;
77         global $_title_diff_delete, $_msg_diff_deleted;
78         global $_msg_diff_adminpass, $_btn_delete, $_msg_invalidpass;
79
80         $script = get_base_uri();
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 = htmlsc($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 }