7 * LICENSE: This source file is licensed under the terms of the GNU General Public License.
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
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
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);
24 function plugin_backup_action()
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;
33 if (! $do_backup) return;
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());
39 check_readable($page, true, true);
40 $s_page = htmlspecialchars($page);
41 $r_page = rawurlencode($page);
43 //$action = isset($vars['action']) ? $vars['action'] : '';
44 $action = WikiParam::getVar('action');
45 if ($action == 'delete') return plugin_backup_delete($page);
47 $s_action = $r_action = '';
49 $s_action = htmlspecialchars($action);
50 $r_action = rawurlencode($action);
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));
58 $script = get_script_uri();
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";
64 //$href = $script . '?cmd=backup&page=' . $r_page . '&age=' . $s_age;
65 $href = $script . WikiParam::convQuery('?cmd=backup&page=' . $r_page . '&age=' . $s_age);
66 $is_page = is_page($page);
68 if ($is_page && $action != 'diff')
69 $body .= ' <li>' . str_replace('$1', '<a href="' . $href .
70 '&action=diff">' . $_msg_diff . '</a>',
71 $_msg_view) . '</li>' . "\n";
73 if ($is_page && $action != 'nowdiff')
74 $body .= ' <li>' . str_replace('$1', '<a href="' . $href .
75 '&action=nowdiff">' . $_msg_nowdiff . '</a>',
76 $_msg_view) . '</li>' . "\n";
78 if ($action != 'source')
79 $body .= ' <li>' . str_replace('$1', '<a href="' . $href .
80 '&action=source">' . $_msg_source . '</a>',
81 $_msg_view) . '</li>' . "\n";
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";
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";
92 $body .= ' <li>' . str_replace('$1', $s_page, $_msg_deleted) . "\n";
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;
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&action=' . $r_action . '&page=' . $r_page . '&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&action=' . $r_action . '&page=' . $r_page . '&age=' . $age) . '">' . $age . ' ' . $date . '</a></li>' . "\n";
112 $body .= ' </ul>' . "\n";
114 $body .= ' </li>' . "\n";
115 $body .= '</ul>' . "\n";
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";
135 if (PLUGIN_BACKUP_DISABLE_BACKUP_RENDERING) {
136 die_message('This feature is prohibited');
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)));
143 return array('msg'=>str_replace('$2', $s_age, $title), 'body'=>$body);
147 function plugin_backup_delete($page)
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;
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"
157 $pass = WikiParam::getVar('pass');
158 /*if (isset($vars['pass'])) {
159 if (pkwk_login($vars['pass'])) {
160 _backup_delete($page);
162 'msg' => $_title_backup_delete,
163 'body' => str_replace('$1', make_pagelink($page), $_msg_backup_deleted)
166 $body = '<p><strong>' . $_msg_invalidpass . '</strong></p>' . "\n";
170 if (pkwk_login($pass)){
171 _backup_delete($page);
173 'msg' => $_title_backup_delete,
174 'body' => str_replace('$1', make_pagelink($page), $_msg_backup_deleted)
177 $body = '<p><strong>' . $_msg_invalidpass . '</strong></p>' . "\n";
181 $postScript = get_script_uri() . WikiParam::convQuery("?");
182 $s_page = htmlspecialchars($page);
184 <p>$_msg_backup_adminpass</p>
185 <form action="$postScript" method="post" class="form">
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);" />
196 return array('msg'=>$_title_backup_delete, 'body'=>$body);
199 function plugin_backup_diff($str)
201 global $_msg_addline, $_msg_delline, $hr;
205 <li>$_msg_addline</li>
206 <li>$_msg_delline</li>
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";
214 function plugin_backup_get_list($page)
216 global $_msg_backuplist, $_msg_diff, $_msg_nowdiff, $_msg_source, $_msg_nobackup;
217 global $_title_backup_delete;
219 $script = get_script_uri();
220 $postScript = $script . WikiParam::convQuery('?cmd=backup');
221 $r_page = rawurlencode($page);
222 $s_page = htmlspecialchars($page);
224 /* $retval[0] = <<<EOD
226 <li><a href="$script?cmd=backup">$_msg_backuplist</a>
236 <ul class="wiki_list">
237 <li><a href="$postScript">$_msg_backuplist</a>
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);
254 if (! PKWK_READONLY) {
255 //$retval[1] .= ' <li><a href="' . $script . '?cmd=backup&action=delete&page=' . $r_page . '">';
256 $retval[1] .= ' <li><a href="' . $script . WikiParam::convQuery('?cmd=backup&action=delete&page=' . $r_page) . '">';
257 $retval[1] .= str_replace('$1', $s_page, $_title_backup_delete);
258 $retval[1] .= '</a></li>' . "\n";
261 //$href = $script . '?cmd=backup&page=' . $r_page . '&age=';
262 $query = '?cmd=backup&page=' . $r_page . '&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>';
270 $date = format_date($data['time'], TRUE);
272 /*$retval[1] .= <<<EOD
273 <li>$_anchor_from$age $date$_anchor_to
274 [ <a href="$href$age&action=diff">$_msg_diff</a>
275 | <a href="$href$age&action=nowdiff">$_msg_nowdiff</a>
276 | <a href="$href$age&action=source">$_msg_source</a>
280 $url = $script . WikiParam::convQuery($query . $age);
282 <li>$_anchor_from$age $date$_anchor_to
283 [ <a href="$url&action=diff">$_msg_diff</a>
284 | <a href="$url&action=nowdiff">$_msg_nowdiff</a>
285 | <a href="$url&action=source">$_msg_source</a>
291 return join('', $retval);
294 // List for all pages
295 function plugin_backup_get_list_all($withfilename = FALSE)
299 //$pages = array_diff(get_existpages(BACKUP_DIR, BACKUP_EXT), $cantedit);
300 $pages = array_diff(WikiPage::getAllBackupPages(), $cantedit);
305 return page_list($pages, 'backup', $withfilename);