2 /////////////////////////////////////////////////
3 // PukiWiki - Yet another WikiWikiWeb clone.
5 // $Id: backup.inc.php,v 1.9 2003/06/23 13:25:14 arino Exp $
8 function plugin_backup_action()
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;
21 check_readable($vars['page'], true, true);
23 $page = $s_page = $r_page = '';
24 if (array_key_exists('page',$vars))
26 $page = $vars['page'];
27 $s_page = htmlspecialchars($page);
28 $r_page = rawurlencode($page);
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))
34 $action = $vars['action'];
35 $s_action = htmlspecialchars($action);
36 $r_action = rawurlencode($action);
43 return array('msg'=>$_title_backuplist,'body'=>get_backup_list_all());
45 if ($action == 'delete')
47 return plugin_backup_delete($page);
52 'msg' => $_title_pagebackuplist,
53 'body' => get_backup_list($page)
58 $body .= " <li><a href=\"$script?cmd=backup\">$_msg_backuplist</a></li>\n";
60 $href = "$script?cmd=backup&page=$r_page&age=$s_age";
62 if ($action != 'diff' and is_page($page))
64 $body .= " <li>".str_replace('$1',"<a href=\"$href&action=diff\">$_msg_diff</a>",$_msg_view)."</li>\n";
66 if ($action != 'nowdiff' and is_page($page))
68 $body .= " <li>".str_replace('$1',"<a href=\"$href&action=nowdiff\">$_msg_nowdiff</a>",$_msg_view)."</li>\n";
70 if ($action != 'source')
72 $body .= " <li>".str_replace('$1',"<a href=\"$href&action=source\">$_msg_source</a>",$_msg_view)."</li>\n";
76 $body .= " <li>".str_replace('$1',"<a href=\"$href\">$_msg_backup</a>",$_msg_view)."</li>\n";
81 $body .= " <li>".str_replace('$1',"<a href=\"$script?$r_page\">$s_page</a>",$_msg_goto)."</li>\n";
85 $body .= " <li>".str_replace('$1',$s_page,$_msg_deleted)."</li>\n";
88 $backups = get_backup($page);
89 if (count($backups) > 0)
92 foreach($backups as $age => $val)
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&action=$r_action&page=$r_page&age=$age\">$age $date</a></li>\n";
104 if ($action == 'diff')
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));
110 return array('msg'=>str_replace('$2',$s_age,$_title_backupdiff),'body'=>$body);
112 else if ($s_action == 'nowdiff')
114 $old = join('',$backups[$s_age]['data']);
115 $cur = join('',get_source($page));
116 $body .= plugin_backup_diff(do_diff($old,$cur));
118 return array('msg'=>str_replace('$2',$s_age,$_title_backupnowdiff),'body'=>$body);
120 else if ($s_action == 'source')
122 $body .= "<pre>".htmlspecialchars(join('',$backups[$s_age]['data']))."</pre>\n";
124 return array('msg'=>str_replace('$2',$s_age,$_title_backupsource),'body'=>$body);
127 $body .= "$hr\n".drop_submit(convert_html($backups[$s_age]['data']));
129 return array('msg'=>str_replace('$2',$s_age,$_title_backup),'body'=>$body);
131 // ¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºï½ü
132 function plugin_backup_delete($page)
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;
138 if (!backup_file_exists($page))
142 $s_page = htmlspecialchars($page);
143 $pass = array_key_exists('pass',$post) ? $post['pass'] : NULL;
145 if (md5($pass) == $adminpass)
147 backup_delete($page);
149 'msg' => $_title_backup_delete,
150 'body' => str_replace('$1',make_pagelink($page),$_msg_backup_deleted)
153 $body = ($pass === NULL) ? '' : "<p><strong>$_msg_invalidpass</strong></p>\n";
155 $msg_delete = str_replace('$1',make_pagelink($page),$_msg_backup_delete);
157 <p>$_msg_backup_adminpass</p>
158 <form action="$script" method="post">
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" />
168 return array('msg'=>$_title_backup_delete,'body'=>$body);
170 function plugin_backup_diff($str)
172 global $_msg_addline,$_msg_delline,$hr;
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);
181 <li>$_msg_addline</li>
182 <li>$_msg_delline</li>
190 // ¥Ð¥Ã¥¯¥¢¥Ã¥×°ìÍ÷¤ò¼èÆÀ
191 function get_backup_list($page)
194 global $_msg_backuplist,$_msg_diff,$_msg_nowdiff,$_msg_source,$_msg_nobackup;
195 global $_title_backup_delete;
197 $r_page = rawurlencode($page);
198 $s_page = htmlspecialchars($page);
202 <li><a href="$script?cmd=backup">$_msg_backuplist</a>
212 $backups = backup_file_exists($page) ? get_backup($page) : array();
213 if (count($backups) == 0)
215 $msg = str_replace('$1',make_pagelink($page),$_msg_nobackup);
216 $retval[1] .= " <li>$msg</li>\n";
217 return join('',$retval);
219 $retval[1] .= " <li><a href=\"$script?cmd=backup&action=delete&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&page=$r_page&age=$age";
226 <li><a href="$href">$age $date</a>
227 [ <a href="$href&action=diff">$_msg_diff</a>
228 | <a href="$href&action=nowdiff">$_msg_nowdiff</a>
229 | <a href="$href&action=source">$_msg_source</a>
234 return join('',$retval);
236 // Á´¥Ú¡¼¥¸¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×°ìÍ÷¤ò¼èÆÀ
237 function get_backup_list_all($withfilename = FALSE)
241 $pages = array_diff(get_existpages(BACKUP_DIR,BACKUP_EXT),$cantedit);
243 if (count($pages) == 0)
248 return page_list($pages,'backup',$withfilename);