2 // PukiWiki - Yet another WikiWikiWeb clone.
5 // 2002-2017 PukiWiki Development Team
6 // 2001-2002 Originally written by yu-ji
7 // License: GPL v2 or (at your option) any later version
11 // Prohibit rendering old wiki texts (suppresses load, transfer rate, and security risk)
12 define('PLUGIN_BACKUP_DISABLE_BACKUP_RENDERING', PKWK_SAFE_MODE || PKWK_OPTIMISE);
14 function plugin_backup_action()
16 global $vars, $do_backup, $hr;
17 global $_msg_backuplist, $_msg_diff, $_msg_nowdiff, $_msg_source, $_msg_backup;
18 global $_msg_view, $_msg_goto, $_msg_deleted;
19 global $_title_backupdiff, $_title_backupnowdiff, $_title_backupsource;
20 global $_title_backup, $_title_pagebackuplist, $_title_backuplist;
22 if (! $do_backup) return;
24 $page = isset($vars['page']) ? $vars['page'] : '';
25 if ($page == '') return array('msg'=>$_title_backuplist, 'body'=>plugin_backup_get_list_all());
27 check_readable($page, true, true);
28 $s_page = htmlsc($page);
29 $r_page = rawurlencode($page);
31 $action = isset($vars['action']) ? $vars['action'] : '';
32 if ($action == 'delete') return plugin_backup_delete($page);
34 $s_action = $r_action = '';
36 $s_action = htmlsc($action);
37 $r_action = rawurlencode($action);
40 $s_age = (isset($vars['age']) && is_numeric($vars['age'])) ? $vars['age'] : 0;
41 if ($s_age <= 0) return array( 'msg'=>$_title_pagebackuplist, 'body'=>plugin_backup_get_list($page));
43 $script = get_base_uri();
45 $body = '<ul>' . "\n";
46 $body .= ' <li><a href="' . $script . '?cmd=backup">' . $_msg_backuplist . '</a></li>' ."\n";
48 $href = $script . '?cmd=backup&page=' . $r_page . '&age=' . $s_age;
49 $is_page = is_page($page);
51 if ($is_page && $action != 'diff')
52 $body .= ' <li>' . str_replace('$1', '<a href="' . $href .
53 '&action=diff">' . $_msg_diff . '</a>',
54 $_msg_view) . '</li>' . "\n";
56 if ($is_page && $action != 'nowdiff')
57 $body .= ' <li>' . str_replace('$1', '<a href="' . $href .
58 '&action=nowdiff">' . $_msg_nowdiff . '</a>',
59 $_msg_view) . '</li>' . "\n";
61 if ($action != 'source')
62 $body .= ' <li>' . str_replace('$1', '<a href="' . $href .
63 '&action=source">' . $_msg_source . '</a>',
64 $_msg_view) . '</li>' . "\n";
66 if (! PLUGIN_BACKUP_DISABLE_BACKUP_RENDERING && $action)
67 $body .= ' <li>' . str_replace('$1', '<a href="' . $href .
68 '">' . $_msg_backup . '</a>',
69 $_msg_view) . '</li>' . "\n";
72 $body .= ' <li>' . str_replace('$1',
73 '<a href="' . $script . '?' . $r_page . '">' . $s_page . '</a>',
76 $body .= ' <li>' . str_replace('$1', $s_page, $_msg_deleted) . "\n";
79 $backups = get_backup($page);
80 $backups_count = count($backups);
81 if ($s_age > $backups_count) $s_age = $backups_count;
83 if ($backups_count > 0) {
84 $body .= ' <ul>' . "\n";
85 foreach($backups as $age => $val) {
86 $date = format_date($val['time'], TRUE);
87 $body .= ($age == $s_age) ?
88 ' <li><em>' . $age . ' ' . $date . '</em></li>' . "\n" :
89 ' <li><a href="' . $script . '?cmd=backup&action=' .
90 $r_action . '&page=' . $r_page . '&age=' . $age .
91 '">' . $age . ' ' . $date . '</a></li>' . "\n";
93 $body .= ' </ul>' . "\n";
95 $body .= ' </li>' . "\n";
96 $body .= '</ul>' . "\n";
98 if ($action == 'diff') {
99 $title = & $_title_backupdiff;
100 $old = ($s_age > 1) ? join('', $backups[$s_age - 1]['data']) : '';
101 $cur = join('', $backups[$s_age]['data']);
102 $body .= plugin_backup_diff(do_diff($old, $cur));
103 } else if ($s_action == 'nowdiff') {
104 $title = & $_title_backupnowdiff;
105 $old = join('', $backups[$s_age]['data']);
106 $cur = join('', get_source($page));
107 $body .= plugin_backup_diff(do_diff($old, $cur));
108 } else if ($s_action == 'source') {
109 $title = & $_title_backupsource;
110 $body .= '<pre>' . htmlsc(join('', $backups[$s_age]['data'])) .
113 if (PLUGIN_BACKUP_DISABLE_BACKUP_RENDERING) {
114 die_message('This feature is prohibited');
116 $title = & $_title_backup;
117 $body .= $hr . "\n" .
118 drop_submit(convert_html($backups[$s_age]['data']));
122 return array('msg'=>str_replace('$2', $s_age, $title), 'body'=>$body);
126 function plugin_backup_delete($page)
128 global $vars, $_title_backup_delete, $_title_pagebackuplist, $_msg_backup_deleted;
129 global $_msg_backup_adminpass, $_btn_delete, $_msg_invalidpass;
131 if (! _backup_file_exists($page))
132 return array('msg'=>$_title_pagebackuplist, 'body'=>plugin_backup_get_list($page)); // Say "is not found"
135 if (isset($vars['pass'])) {
136 if (pkwk_login($vars['pass'])) {
137 _backup_delete($page);
139 'msg' => $_title_backup_delete,
140 'body' => str_replace('$1', make_pagelink($page), $_msg_backup_deleted)
143 $body = '<p><strong>' . $_msg_invalidpass . '</strong></p>' . "\n";
147 $script = get_base_uri();
148 $s_page = htmlsc($page);
150 <p>$_msg_backup_adminpass</p>
151 <form action="$script" method="post">
153 <input type="hidden" name="cmd" value="backup" />
154 <input type="hidden" name="page" value="$s_page" />
155 <input type="hidden" name="action" value="delete" />
156 <input type="password" name="pass" size="12" />
157 <input type="submit" name="ok" value="$_btn_delete" />
161 return array('msg'=>$_title_backup_delete, 'body'=>$body);
164 function plugin_backup_diff($str)
166 global $_msg_addline, $_msg_delline, $hr;
170 <li>$_msg_addline</li>
171 <li>$_msg_delline</li>
175 return $ul . '<pre>' . diff_style_to_css(htmlsc($str)) . '</pre>' . "\n";
178 function plugin_backup_get_list($page)
180 global $_msg_backuplist, $_msg_diff, $_msg_nowdiff, $_msg_source, $_msg_nobackup;
181 global $_title_backup_delete;
183 $script = get_base_uri();
184 $r_page = rawurlencode($page);
185 $s_page = htmlsc($page);
189 <li><a href="$script?cmd=backup">$_msg_backuplist</a>
199 $backups = _backup_file_exists($page) ? get_backup($page) : array();
200 if (empty($backups)) {
201 $msg = str_replace('$1', make_pagelink($page), $_msg_nobackup);
202 $retval[1] .= ' <li>' . $msg . '</li>' . "\n";
203 return join('', $retval);
206 if (! PKWK_READONLY) {
207 $retval[1] .= ' <li><a href="' . $script . '?cmd=backup&action=delete&page=' .
209 $retval[1] .= str_replace('$1', $s_page, $_title_backup_delete);
210 $retval[1] .= '</a></li>' . "\n";
213 $href = $script . '?cmd=backup&page=' . $r_page . '&age=';
214 $_anchor_from = $_anchor_to = '';
215 foreach ($backups as $age=>$data) {
216 if (! PLUGIN_BACKUP_DISABLE_BACKUP_RENDERING) {
217 $_anchor_from = '<a href="' . $href . $age . '">';
218 $_anchor_to = '</a>';
220 $date = format_date($data['time'], TRUE);
222 if (isset($data['author'])) {
223 $author_info = htmlsc('by ' . $data['author_fullname']
224 . '(' . $data['author'] . ')');
227 <li>$_anchor_from$age $date$_anchor_to
228 [ <a href="$href$age&action=diff">$_msg_diff</a>
229 | <a href="$href$age&action=nowdiff">$_msg_nowdiff</a>
230 | <a href="$href$age&action=source">$_msg_source</a>
236 return join('', $retval);
239 // List for all pages
240 function plugin_backup_get_list_all($withfilename = FALSE)
244 $pages = array_diff(get_existpages(BACKUP_DIR, BACKUP_EXT), $cantedit);
249 return page_list($pages, 'backup', $withfilename);