OSDN Git Service

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