OSDN Git Service

初回コミット(v2.6.17.1)
[magic3/magic3.git] / widgets / wiki_main / include / plugin / backup.inc.php
1 <?php
2 /**
3  * backupプラグイン
4  *
5  * PHP versions 5
6  *
7  * LICENSE: This source file is licensed under the terms of the GNU General Public License.
8  *
9  * @package    Magic3 Framework
10  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
11  * @copyright  Copyright 2006-2010 Magic3 Project.
12  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
13  * @version    SVN: $Id: backup.inc.php 3474 2010-08-13 10:36:48Z fishbone $
14  * @link       http://www.magic3.org
15  */
16 // Copyright (C)
17 //   2002-2005 PukiWiki Developers Team
18 //   2001-2002 Originally written by yu-ji
19 // License: GPL v2 or (at your option) any later version
20
21 // Prohibit rendering old wiki texts (suppresses load, transfer rate, and security risk)
22 define('PLUGIN_BACKUP_DISABLE_BACKUP_RENDERING', PKWK_SAFE_MODE || PKWK_OPTIMISE);
23
24 function plugin_backup_action()
25 {
26         //global $vars, $do_backup, $hr;
27         global $do_backup, $hr;
28         global $_msg_backuplist, $_msg_diff, $_msg_nowdiff, $_msg_source, $_msg_backup;
29         global $_msg_view, $_msg_goto, $_msg_deleted;
30         global $_title_backupdiff, $_title_backupnowdiff, $_title_backupsource;
31         global $_title_backup, $_title_pagebackuplist, $_title_backuplist;
32
33         if (! $do_backup) return;
34
35         //$page = isset($vars['page']) ? $vars['page']  : '';
36         $page = WikiParam::getPage();
37         if ($page == '') return array('msg'=>$_title_backuplist, 'body'=>plugin_backup_get_list_all());
38
39         check_readable($page, true, true);
40         $s_page = htmlspecialchars($page);
41         $r_page = rawurlencode($page);
42
43         //$action = isset($vars['action']) ? $vars['action'] : '';
44         $action = WikiParam::getVar('action');
45         if ($action == 'delete') return plugin_backup_delete($page);
46
47         $s_action = $r_action = '';
48         if ($action != '') {
49                 $s_action = htmlspecialchars($action);
50                 $r_action = rawurlencode($action);
51         }
52
53         //$s_age  = (isset($vars['age']) && is_numeric($vars['age'])) ? $vars['age'] : 0;
54         $value = WikiParam::getVar('age');
55         $s_age  = ($value == '') ? 0 : intval($value);
56         if ($s_age <= 0) return array( 'msg'=>$_title_pagebackuplist, 'body'=>plugin_backup_get_list($page));
57
58         $script = get_script_uri();
59
60         $body  = '<ul>' . "\n";
61         //$body .= ' <li><a href="' . $script . '?cmd=backup">' . $_msg_backuplist . '</a></li>' ."\n";
62         $body .= ' <li><a href="' . $script . WikiParam::convQuery('?cmd=backup') . '">' . $_msg_backuplist . '</a></li>' ."\n";
63
64         //$href    = $script . '?cmd=backup&amp;page=' . $r_page . '&amp;age=' . $s_age;
65         $href    = $script . WikiParam::convQuery('?cmd=backup&amp;page=' . $r_page . '&amp;age=' . $s_age);
66         $is_page = is_page($page);
67
68         if ($is_page && $action != 'diff')
69                 $body .= ' <li>' . str_replace('$1', '<a href="' . $href .
70                         '&amp;action=diff">' . $_msg_diff . '</a>',
71                         $_msg_view) . '</li>' . "\n";
72
73         if ($is_page && $action != 'nowdiff')
74                 $body .= ' <li>' . str_replace('$1', '<a href="' . $href .
75                         '&amp;action=nowdiff">' . $_msg_nowdiff . '</a>',
76                         $_msg_view) . '</li>' . "\n";
77
78         if ($action != 'source')
79                 $body .= ' <li>' . str_replace('$1', '<a href="' . $href .
80                         '&amp;action=source">' . $_msg_source . '</a>',
81                         $_msg_view) . '</li>' . "\n";
82
83         if (! PLUGIN_BACKUP_DISABLE_BACKUP_RENDERING && $action)
84                 $body .= ' <li>' . str_replace('$1', '<a href="' . $href .
85                         '">' . $_msg_backup . '</a>',
86                         $_msg_view) . '</li>' . "\n";
87
88         if ($is_page) {
89                 //$body .= ' <li>' . str_replace('$1', '<a href="' . $script . '?' . $r_page . '">' . $s_page . '</a>', $_msg_goto) . "\n";
90                 $body .= ' <li>' . str_replace('$1', '<a href="' . $script . WikiParam::convQuery('?' . $r_page) . '">' . $s_page . '</a>', $_msg_goto) . "\n";
91         } else {
92                 $body .= ' <li>' . str_replace('$1', $s_page, $_msg_deleted) . "\n";
93         }
94
95         //$backups = get_backup($page);
96         $backups = WikiPage::getPageBackupInfo($page);
97         $backups_count = count($backups);
98         if ($s_age > $backups_count) $s_age = $backups_count;
99
100         if ($backups_count > 0) {
101                 //$body .= '  <ul>' . "\n";
102                 $body .= '  <ul class="wiki_list">' . "\n";
103                 foreach($backups as $age => $val) {
104                         $date = format_date($val['time'], TRUE);
105                         /*$body .= ($age == $s_age) ?
106                                 '   <li><em>' . $age . ' ' . $date . '</em></li>' . "\n" :
107                                 '   <li><a href="' . $script . '?cmd=backup&amp;action=' . $r_action . '&amp;page=' . $r_page . '&amp;age=' . $age . '">' . $age . ' ' . $date . '</a></li>' . "\n";*/
108                         $body .= ($age == $s_age) ?
109                                 '   <li><em>' . $age . ' ' . $date . '</em></li>' . "\n" :
110                                 '   <li><a href="' . $script . WikiParam::convQuery('?cmd=backup&amp;action=' . $r_action . '&amp;page=' . $r_page . '&amp;age=' . $age) . '">' . $age . ' ' . $date . '</a></li>' . "\n";
111                 }
112                 $body .= '  </ul>' . "\n";
113         }
114         $body .= ' </li>' . "\n";
115         $body .= '</ul>'  . "\n";
116
117         if ($action == 'diff') {
118                 $title = $_title_backupdiff;
119                 /*$old = ($s_age > 1) ? join('', $backups[$s_age - 1]['data']) : '';
120                 $cur = join('', $backups[$s_age]['data']);*/
121                 $old = ($s_age > 1) ? WikiPage::getPageBackup($page, $s_age - 1, true) : '';
122                 $cur = WikiPage::getPageBackup($page, $s_age, true);
123                 $body .= plugin_backup_diff(do_diff($old, $cur));
124         } else if ($s_action == 'nowdiff') {
125                 $title = $_title_backupnowdiff;
126                 //$old = join('', $backups[$s_age]['data']);
127                 $old = WikiPage::getPageBackup($page, $s_age, true);
128                 $cur = join('', get_source($page));
129                 $body .= plugin_backup_diff(do_diff($old, $cur));
130         } else if ($s_action == 'source') {
131                 $title = $_title_backupsource;
132                 //$body .= '<pre>' . htmlspecialchars(join('', $backups[$s_age]['data'])) . '</pre>' . "\n";
133                 $body .= '<pre class="wiki_pre">' . htmlspecialchars(WikiPage::getPageBackup($page, $s_age, true)) . '</pre>' . "\n";
134         } else {
135                 if (PLUGIN_BACKUP_DISABLE_BACKUP_RENDERING) {
136                         die_message('This feature is prohibited');
137                 } else {
138                         $title = $_title_backup;
139                         //$body .= $hr . "\n" . drop_submit(convert_html($backups[$s_age]['data']));
140                         $body .= $hr . "\n" . drop_submit(convert_html(WikiPage::getPageBackup($page, $s_age)));
141                 }
142         }
143         return array('msg'=>str_replace('$2', $s_age, $title), 'body'=>$body);
144 }
145
146 // Delete backup
147 function plugin_backup_delete($page)
148 {
149         //global $vars, $_title_backup_delete, $_title_pagebackuplist, $_msg_backup_deleted;
150         global $_title_backup_delete, $_title_pagebackuplist, $_msg_backup_deleted;
151         global $_msg_backup_adminpass, $_btn_delete, $_msg_invalidpass;
152
153         //if (! _backup_file_exists($page))
154         if (!WikiPage::isPageBackup($page)) return array('msg'=>$_title_pagebackuplist, 'body'=>plugin_backup_get_list($page)); // Say "is not found"
155
156         $body = '';
157         $pass = WikiParam::getVar('pass');
158         /*if (isset($vars['pass'])) {
159                 if (pkwk_login($vars['pass'])) {
160                         _backup_delete($page);
161                         return array(
162                                 'msg'  => $_title_backup_delete,
163                                 'body' => str_replace('$1', make_pagelink($page), $_msg_backup_deleted)
164                         );
165                 } else {
166                         $body = '<p><strong>' . $_msg_invalidpass . '</strong></p>' . "\n";
167                 }
168         }*/
169         if ($pass != ''){
170                 if (pkwk_login($pass)){
171                         _backup_delete($page);
172                         return array(
173                                 'msg'  => $_title_backup_delete,
174                                 'body' => str_replace('$1', make_pagelink($page), $_msg_backup_deleted)
175                         );
176                 } else {
177                         $body = '<p><strong>' . $_msg_invalidpass . '</strong></p>' . "\n";
178                 }
179         }
180
181         $postScript = get_script_uri() . WikiParam::convQuery("?");
182         $s_page = htmlspecialchars($page);
183         $body .= <<<EOD
184 <p>$_msg_backup_adminpass</p>
185 <form action="$postScript" method="post" class="form">
186  <div>
187   <input type="hidden"   name="wcmd"    value="backup" />
188   <input type="hidden"   name="page"   value="$s_page" />
189   <input type="hidden"   name="action" value="delete" />
190   <input type="hidden"   name="pass" />
191   <input type="password" name="password" size="12" />
192   <input type="submit"   name="ok"     class="button" value="$_btn_delete" onclick="this.form.pass.value = hex_md5(this.form.password.value);" />
193  </div>
194 </form>
195 EOD;
196         return  array('msg'=>$_title_backup_delete, 'body'=>$body);
197 }
198
199 function plugin_backup_diff($str)
200 {
201         global $_msg_addline, $_msg_delline, $hr;
202         $ul = <<<EOD
203 $hr
204 <ul>
205  <li>$_msg_addline</li>
206  <li>$_msg_delline</li>
207 </ul>
208 EOD;
209
210         return $ul . '<pre class="wiki_pre">' . diff_style_to_css(htmlspecialchars($str)) . '</pre>' . "\n";
211         //return $ul . '<pre>' . diff_style_to_css(htmlspecialchars($str)) . '</pre>' . "\n";
212 }
213
214 function plugin_backup_get_list($page)
215 {
216         global $_msg_backuplist, $_msg_diff, $_msg_nowdiff, $_msg_source, $_msg_nobackup;
217         global $_title_backup_delete;
218
219         $script = get_script_uri();
220         $postScript = $script . WikiParam::convQuery('?cmd=backup');
221         $r_page = rawurlencode($page);
222         $s_page = htmlspecialchars($page);
223         $retval = array();
224 /*      $retval[0] = <<<EOD
225 <ul>
226  <li><a href="$script?cmd=backup">$_msg_backuplist</a>
227   <ul>
228 EOD;
229         $retval[1] = "\n";
230         $retval[2] = <<<EOD
231   </ul>
232  </li>
233 </ul>
234 EOD;*/
235         $retval[0] = <<<EOD
236 <ul class="wiki_list">
237  <li><a href="$postScript">$_msg_backuplist</a>
238   <ul>
239 EOD;
240         $retval[1] = "\n";
241         $retval[2] = <<<EOD
242   </ul>
243  </li>
244 </ul>
245 EOD;
246         //$backups = _backup_file_exists($page) ? get_backup($page) : array();
247         $backups = WikiPage::isPageBackup($page) ? WikiPage::getPageBackupInfo($page) : array();
248         if (empty($backups)) {
249                 $msg = str_replace('$1', make_pagelink($page), $_msg_nobackup);
250                 $retval[1] .= '   <li>' . $msg . '</li>' . "\n";
251                 return join('', $retval);
252         }
253
254         if (! PKWK_READONLY) {
255                 //$retval[1] .= '   <li><a href="' . $script . '?cmd=backup&amp;action=delete&amp;page=' . $r_page . '">';
256                 $retval[1] .= '   <li><a href="' . $script . WikiParam::convQuery('?cmd=backup&amp;action=delete&amp;page=' . $r_page) . '">';
257                 $retval[1] .= str_replace('$1', $s_page, $_title_backup_delete);
258                 $retval[1] .= '</a></li>' . "\n";
259         }
260
261         //$href = $script . '?cmd=backup&amp;page=' . $r_page . '&amp;age=';
262         $query = '?cmd=backup&amp;page=' . $r_page . '&amp;age=';
263         $_anchor_from = $_anchor_to   = '';
264         foreach ($backups as $age=>$data) {
265                 if (! PLUGIN_BACKUP_DISABLE_BACKUP_RENDERING) {
266                         //$_anchor_from = '<a href="' . $href . $age . '">';
267                         $_anchor_from = '<a href="' . $script . WikiParam::convQuery($query . $age) . '">';
268                         $_anchor_to   = '</a>';
269                 }
270                 $date = format_date($data['time'], TRUE);
271
272                 /*$retval[1] .= <<<EOD
273    <li>$_anchor_from$age $date$_anchor_to
274      [ <a href="$href$age&amp;action=diff">$_msg_diff</a>
275      | <a href="$href$age&amp;action=nowdiff">$_msg_nowdiff</a>
276      | <a href="$href$age&amp;action=source">$_msg_source</a>
277      ]
278    </li>
279 EOD;*/
280                 $url = $script . WikiParam::convQuery($query . $age);
281                 $retval[1] .= <<<EOD
282    <li>$_anchor_from$age $date$_anchor_to
283      [ <a href="$url&amp;action=diff">$_msg_diff</a>
284      | <a href="$url&amp;action=nowdiff">$_msg_nowdiff</a>
285      | <a href="$url&amp;action=source">$_msg_source</a>
286      ]
287    </li>
288 EOD;
289         }
290
291         return join('', $retval);
292 }
293
294 // List for all pages
295 function plugin_backup_get_list_all($withfilename = FALSE)
296 {
297         global $cantedit;
298
299         //$pages = array_diff(get_existpages(BACKUP_DIR, BACKUP_EXT), $cantedit);
300         $pages = array_diff(WikiPage::getAllBackupPages(), $cantedit);
301
302         if (empty($pages)) {
303                 return '';
304         } else {
305                 return page_list($pages, 'backup', $withfilename);
306         }
307 }
308 ?>