OSDN Git Service

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