OSDN Git Service

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