OSDN Git Service

use make_pagelink().
[pukiwiki/pukiwiki.git] / plugin / backup.inc.php
1 <?php
2 /////////////////////////////////////////////////
3 // PukiWiki - Yet another WikiWikiWeb clone.
4 //
5 // $Id: backup.inc.php,v 1.5 2003/02/20 12:37:16 panda Exp $
6 //
7 // ¥Ð¥Ã¥¯¥¢¥Ã¥×
8 function plugin_backup_action()
9 {
10         global $script,$get,$do_backup,$hr;
11         global $_msg_backuplist,$_msg_diff,$_msg_nowdiff,$_msg_source,$_msg_backup;
12         global $_msg_view,$_msg_goto,$_msg_deleleted,$_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) { return; }
17
18         $name = $s_page = $s_name = $r_page = '';
19         if (array_key_exists('page',$get)) {
20                 $s_page = htmlspecialchars($get['page']);
21                 $r_page = rawurlencode($get['page']);
22 //              $name = strip_bracket($get['page']);
23 //              $s_name = htmlspecialchars($name);
24         }
25         $s_age = (array_key_exists('age',$get) and is_numeric($get['age'])) ? $get['age'] : 0;
26         $s_action = $r_action = '';
27         if (array_key_exists('action',$get)) {
28                 $s_action = htmlspecialchars($get['action']);
29                 $r_action = rawurlencode($get['action']);
30         }
31         
32         $body = '';
33         
34         if (!array_key_exists('page',$get) or $get['page'] == '') {
35                 return array('msg'=>$_title_backuplist,'body'=>get_backup_list_all());
36         }
37         
38         if ($s_age == 0) {
39                 return array('msg'=>$_title_pagebackuplist,'body'=>get_backup_list($get['page']));
40         }
41         
42         $body  = "<ul>\n";
43         $body .= " <li><a href=\"$script?cmd=backup\">$_msg_backuplist</a></li>\n";
44
45         $href = "$script?cmd=backup&amp;page=$r_page&amp;age=$s_age";
46         
47         if (is_page($get['page'])) {
48                 if ($s_action != 'diff') {
49                         $body .= " <li>".str_replace('$1',"<a href=\"$href&amp;action=diff\">$_msg_diff</a>",$_msg_view)."</li>\n";
50                 }
51                 if ($s_action != 'nowdiff') {
52                         $body .= " <li>".str_replace('$1',"<a href=\"$href&amp;action=nowdiff\">$_msg_nowdiff</a>",$_msg_view)."</li>\n";
53                 }
54         }
55         
56         if ($s_action != 'source') {
57                 $body .= " <li>".str_replace('$1',"<a href=\"$href&amp;action=source\">$_msg_source</a>",$_msg_view)."</li>\n";
58         }
59         if ($s_action != '') {
60                 $body .= " <li>".str_replace('$1',"<a href=\"$href\">$_msg_backup</a>",$_msg_view)."</li>\n";
61         }
62         
63         if (is_page($get['page'])) {
64                 $body .= " <li>".str_replace('$1',"<a href=\"$script?$r_page\">$s_page</a>",$_msg_goto)."</li>\n";
65         }
66         else {
67                 $body .= " <li>".str_replace('$1',$s_page,$_msg_deleleted)."</li>\n";
68         }
69
70         $backups = get_backup($get['page']);
71         if (count($backups) > 0) {
72                 $body .= "  <ul>\n";
73                 foreach($backups as $age => $val) {
74                         $date = format_date($val['time'],TRUE);
75                         if ($age == $get['age']) {
76                                 $body .= "   <li><em>$age $date</em></li>\n";
77                         }
78                         else {
79                                 $body .= "   <li><a href=\"$script?cmd={$get['cmd']}&amp;action=$r_action&amp;page=$r_page&amp;age=$age\">$age $date</a></li>\n";
80                         }
81                 }
82                 $body .= "  </ul>\n";
83         }
84         $body .= " </li>\n";
85         $body .= "</ul>\n";
86         
87         if ($s_action == 'diff') {
88                 $old = ($get['age'] > 1) ? join('',$backups[$get['age']-1]['data']) : '';
89                 $cur = join('',$backups[$get['age']]['data']);
90                 $body .= backup_diff(do_diff($old,$cur));
91                 
92                 return array('msg'=>str_replace('$2',$s_age,$_title_backupdiff),'body'=>$body);
93         }
94         else if ($s_action == 'nowdiff') {
95                 $old = join('',$backups[$get['age']]['data']);
96                 $cur = join('',get_source($get['page']));
97                 $body .= 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                 $body .= "<pre>".htmlspecialchars(join('',$backups[$get['age']]['data']))."</pre>\n";
103                 
104                 return array('msg'=>str_replace('$2',$s_age,$_title_backupsource),'body'=>$body);
105         }
106         // else
107         $body .= "$hr\n".
108                 drop_submit(convert_html($backups[$get['age']]['data']));
109         
110         return array('msg'=>str_replace('$2',$s_age,$_title_backup),'body'=>$body);
111 }
112 function backup_diff($str) 
113 {
114         global $_msg_addline,$_msg_delline,$hr;
115         
116         $str = htmlspecialchars($str);
117         $str = preg_replace('/^(\-)(.*)$/m','<span class="diff_removed"> $2</span>',$str);
118         $str = preg_replace('/^(\+)(.*)$/m','<span class="diff_added"> $2</span>',$str);
119         $str = trim($str);
120         $str = <<<EOD
121 $hr
122 <ul>
123  <li>$_msg_addline</li>
124  <li>$_msg_delline</li>
125 </ul>
126 <pre>$str</pre>
127 EOD;
128         
129         return $str;
130 }
131
132 // ¥Ð¥Ã¥¯¥¢¥Ã¥×°ìÍ÷¤ò¼èÆÀ
133 function get_backup_list($page)
134 {
135         global $script;
136         global $_msg_backuplist,$_msg_diff,$_msg_nowdiff,$_msg_source,$_msg_nobackup;
137         
138         $r_page = rawurlencode($page);
139         $s_page = htmlspecialchars($page);
140         $retval  = "<ul>\n";
141         $retval .= " <li><a href=\"$script?cmd=backup\">$_msg_backuplist</a>\n";
142         
143         $backups = get_backup($page);
144         $retval .= "  <ul>\n";
145         if (count($backups) > 0) {
146                 foreach ($backups as $age=>$data) {
147                         $date = format_date($data['time'],TRUE);
148                         $href = "$script?cmd=backup&amp;page=$r_page&amp;age=$age";
149                         $retval .= <<<EOD
150    <li><a href="$href">$age $date</a>
151      [ <a href="$href&amp;action=diff">$_msg_diff</a>
152      | <a href="$href&amp;action=nowdiff">$_msg_nowdiff</a>
153      | <a href="$href&amp;action=source">$_msg_source</a>
154      ]
155    </li>
156 EOD;
157                 }
158         }
159         else {
160                 $msg = str_replace('$1',make_pagelink($page),$_msg_nobackup);
161                 $retval .= "   <li>$msg</li>\n";
162         }
163         $retval .= "  </ul>\n </li>\n</ul>\n";
164         
165         return $retval;
166 }
167 // Á´¥Ú¡¼¥¸¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×°ìÍ÷¤ò¼èÆÀ
168 function get_backup_list_all($withfilename = FALSE)
169 {
170         global $cantedit;
171         
172         $_pages = get_existpages(BACKUP_DIR,BACKUP_EXT);
173         if (count($_pages) == 0) {
174                 return '';
175         }
176         
177         $pages = array();
178         foreach($_pages as $page) {
179                 if (!in_array($page,$cantedit)) {
180                         $pages[] = $page;
181                 }
182         }
183         
184         return page_list($pages,'backup',$withfilename);
185 }
186 ?>