OSDN Git Service

BugTrack/791: Fix typo 0,91 => 0.91
[pukiwiki/pukiwiki.git] / plugin / backup.inc.php
1 <?php
2 /////////////////////////////////////////////////
3 // PukiWiki - Yet another WikiWikiWeb clone.
4 //
5 // $Id: backup.inc.php,v 1.19 2004/11/01 12:20:34 henoheno Exp $
6 //
7 // ¥Ð¥Ã¥¯¥¢¥Ã¥×
8 function plugin_backup_action()
9 {
10         global $script, $vars, $do_backup, $hr;
11         global $_msg_backuplist, $_msg_diff, $_msg_nowdiff, $_msg_source, $_msg_backup;
12         global $_msg_view, $_msg_goto, $_msg_deleted;
13         global $_title_backupdiff, $_title_backupnowdiff, $_title_backupsource;
14         global $_title_backup, $_title_pagebackuplist, $_title_backuplist;
15
16         if (! $do_backup) return;
17
18         $page = isset($vars['page']) ? $vars['page']  : '';
19         if ($page == '') return array('msg'=>$_title_backuplist, 'body'=>get_backup_list_all());
20
21         check_readable($page, true, true);
22         $s_page = htmlspecialchars($page);
23         $r_page = rawurlencode($page);
24
25         $action = isset($vars['action']) ? $vars['action'] : '';
26         if ($action == 'delete') return plugin_backup_delete($page);
27
28         $s_action = $r_action = '';
29         if ($action != '') {
30                 $s_action = htmlspecialchars($action);
31                 $r_action = rawurlencode($action);
32         }
33
34         $s_age  = (isset($vars['age']) && is_numeric($vars['age'])) ? $vars['age'] : 0;
35         if ($s_age == 0) return array( 'msg'=>$_title_pagebackuplist, 'body'=>get_backup_list($page));
36
37
38         $body  = "<ul>\n";
39         $body .= " <li><a href=\"$script?cmd=backup\">$_msg_backuplist</a></li>\n";
40
41         $href = "$script?cmd=backup&amp;page=$r_page&amp;age=$s_age";
42
43         $is_page = is_page($page);
44         if ($is_page) {
45                 if ($action != 'diff')
46                         $body .= ' <li>' . str_replace('$1', "<a href=\"$href&amp;action=diff\">$_msg_diff</a>", $_msg_view) . "</li>\n";
47                 if ($action != 'nowdiff')
48                         $body .= ' <li>' . str_replace('$1', "<a href=\"$href&amp;action=nowdiff\">$_msg_nowdiff</a>", $_msg_view) . "</li>\n";
49         }
50
51         if ($action != 'source')
52                 $body .= ' <li>' . str_replace('$1', "<a href=\"$href&amp;action=source\">$_msg_source</a>", $_msg_view) . "</li>\n";
53
54         if ($action)
55                 $body .= ' <li>' . str_replace('$1', "<a href=\"$href\">$_msg_backup</a>", $_msg_view) . "</li>\n";
56
57         if ($is_page) {
58                 $body .= ' <li>' . str_replace('$1', "<a href=\"$script?$r_page\">$s_page</a>", $_msg_goto) . "\n";
59         } else {
60                 $body .= ' <li>' . str_replace('$1', $s_page, $_msg_deleted) . "\n";
61         }
62
63         $backups = get_backup($page);
64         if (! empty($backups)) {
65                 $body .= "  <ul>\n";
66                 foreach($backups as $age => $val) {
67                         $date = format_date($val['time'], TRUE);
68                         $body .= ($age == $s_age) ?
69                                 "   <li><em>$age $date</em></li>\n" :
70                                 "   <li><a href=\"$script?cmd=backup&amp;action=$r_action&amp;page=$r_page&amp;age=$age\">$age $date</a></li>\n";
71                 }
72                 $body .= "  </ul>\n";
73         }
74         $body .= " </li>\n";
75         $body .= "</ul>\n";
76
77         if ($action == 'diff') {
78                 $old = ($s_age > 1) ? join('', $backups[$s_age - 1]['data']) : '';
79                 $cur = join('', $backups[$s_age]['data']);
80                 $body .= plugin_backup_diff(do_diff($old, $cur));
81                 return array('msg'=>str_replace('$2', $s_age, $_title_backupdiff), 'body'=>$body);
82
83         } else if ($s_action == 'nowdiff') {
84                 $old = join('', $backups[$s_age]['data']);
85                 $cur = join('', get_source($page));
86                 $body .= plugin_backup_diff(do_diff($old, $cur));
87                 return array('msg'=>str_replace('$2', $s_age, $_title_backupnowdiff), 'body'=>$body);
88
89         } else if ($s_action == 'source') {
90                 $body .= '<pre>' . htmlspecialchars(join('', $backups[$s_age]['data'])) . "</pre>\n";
91                 return array('msg'=>str_replace('$2', $s_age, $_title_backupsource), 'body'=>$body);
92
93         } else {
94                 $body .= "$hr\n" . drop_submit(convert_html($backups[$s_age]['data']));
95                 return array('msg'=>str_replace('$2', $s_age, $_title_backup), 'body'=>$body);
96         }
97 }
98
99 // ¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºï½ü
100 function plugin_backup_delete($page)
101 {
102         global $script, $vars;
103         global $_title_backup_delete, $_title_pagebackuplist, $_msg_backup_deleted;
104         global $_msg_backup_adminpass, $_btn_delete, $_msg_invalidpass;
105
106         if (! _backup_file_exists($page))
107                 return array('msg'=>$_title_pagebackuplist, 'body'=>get_backup_list($page)); // Say "is not found"
108
109         $body = '';
110         if (isset($vars['pass'])) {
111                 if (pkwk_login($vars['pass'])) {
112                         _backup_delete($page);
113                         return array(
114                                 'msg'  => $_title_backup_delete,
115                                 'body' => str_replace('$1',make_pagelink($page),$_msg_backup_deleted)
116                         );
117                 } else {
118                         $body = "<p><strong>$_msg_invalidpass</strong></p>\n";
119                 }
120         }
121
122         $s_page = htmlspecialchars($page);
123         $body .= <<<EOD
124 <p>$_msg_backup_adminpass</p>
125 <form action="$script" method="post">
126  <div>
127   <input type="hidden"   name="cmd"    value="backup" />
128   <input type="hidden"   name="page"   value="$s_page" />
129   <input type="hidden"   name="action" value="delete" />
130   <input type="password" name="pass"   size="12" />
131   <input type="submit"   name="ok"     value="$_btn_delete" />
132  </div>
133 </form>
134 EOD;
135         return  array('msg'=>$_title_backup_delete, 'body'=>$body);
136 }
137
138 function plugin_backup_diff($str)
139 {
140         global $_msg_addline, $_msg_delline,$hr;
141
142         $str = htmlspecialchars($str);
143         $str = preg_replace('/^(\-)(.*)$/m', '<span class="diff_removed"> $2</span>', $str);
144         $str = preg_replace('/^(\+)(.*)$/m', '<span class="diff_added"> $2</span>', $str);
145         $str = trim($str);
146         $str = <<<EOD
147 $hr
148 <ul>
149  <li>$_msg_addline</li>
150  <li>$_msg_delline</li>
151 </ul>
152 <pre>$str</pre>
153 EOD;
154
155         return $str;
156 }
157
158 // ¥Ð¥Ã¥¯¥¢¥Ã¥×°ìÍ÷¤ò¼èÆÀ
159 function get_backup_list($page)
160 {
161         global $script;
162         global $_msg_backuplist, $_msg_diff, $_msg_nowdiff, $_msg_source, $_msg_nobackup;
163         global $_title_backup_delete;
164
165         $r_page = rawurlencode($page);
166         $s_page = htmlspecialchars($page);
167         $retval = array();
168         $retval[0] = <<<EOD
169 <ul>
170  <li><a href="$script?cmd=backup">$_msg_backuplist</a>
171   <ul>
172 EOD;
173         $retval[1] = "\n";
174         $retval[2] = <<<EOD
175   </ul>
176  </li>
177 </ul>
178 EOD;
179
180         $backups = _backup_file_exists($page) ? get_backup($page) : array();
181         if (empty($backups)) {
182                 $msg = str_replace('$1', make_pagelink($page), $_msg_nobackup);
183                 $retval[1] .= "   <li>$msg</li>\n";
184                 return join('', $retval);
185         }
186         $retval[1] .= "   <li><a href=\"$script?cmd=backup&amp;action=delete&amp;page=$r_page\">";
187         $retval[1] .= str_replace('$1', $s_page, $_title_backup_delete);
188         $retval[1] .= "</a></li>\n";
189         foreach ($backups as $age=>$data) {
190                 $date = format_date($data['time'], TRUE);
191                 $href = "$script?cmd=backup&amp;page=$r_page&amp;age=$age";
192                 $retval[1] .= <<<EOD
193    <li><a href="$href">$age $date</a>
194      [ <a href="$href&amp;action=diff">$_msg_diff</a>
195      | <a href="$href&amp;action=nowdiff">$_msg_nowdiff</a>
196      | <a href="$href&amp;action=source">$_msg_source</a>
197      ]
198    </li>
199 EOD;
200         }
201         return join('', $retval);
202 }
203
204 // Á´¥Ú¡¼¥¸¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×°ìÍ÷¤ò¼èÆÀ
205 function get_backup_list_all($withfilename = FALSE)
206 {
207         global $cantedit;
208
209         $pages = array_diff(get_existpages(BACKUP_DIR, BACKUP_EXT), $cantedit);
210
211         if (count($pages) == 0)
212                 return '';
213
214         return page_list($pages, 'backup', $withfilename);
215 }
216 ?>