OSDN Git Service

sng's developed version
[pukiwiki/pukiwiki.git] / pukiwiki.php
1 <?\r
2 // pukiwiki.php - Yet another WikiWikiWeb clone.\r
3 //\r
4 // Copyright (C) 2001,2002 by sng.\r
5 // <sng@factage.com>\r
6 // http://factage.com/sng/pukiwiki/\r
7 //\r
8 // Special thanks\r
9 //  YukiWiki by Hiroshi Yuki\r
10 //  <hyuki@hyuki.com>\r
11 //  http://www.hyuki.com/yukiwiki/\r
12 //\r
13 // This program is free software; you can redistribute it and/or modify\r
14 // it under the terms of the GNU General Public License as published by\r
15 // the Free Software Foundation; either version 2 of the License, or\r
16 // (at your option) any later version.\r
17 //\r
18 // This program is distributed in the hope that it will be useful,\r
19 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
20 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
21 // GNU General Public License for more details.\r
22 //\r
23 //# $Id: pukiwiki.php,v 1.1 2002/06/20 13:59:31 masui Exp $\r
24 /////////////////////////////////////////////////\r
25 \r
26 /////////////////////////////////////////////////\r
27 // ÀßÄê¥Õ¥¡¥¤¥ë¤Î¾ì½ê\r
28 define("INI_FILE","./pukiwiki.ini.php");\r
29 \r
30 //** ½é´üÀßÄê **\r
31 \r
32 define("S_VERSION","1.3");\r
33 define("UTIME",time());\r
34 define("HTTP_USER_AGENT",$HTTP_SERVER_VARS["HTTP_USER_AGENT"]);\r
35 define("PHP_SELF",$HTTP_SERVER_VARS["PHP_SELF"]);\r
36 define("SERVER_NAME",$HTTP_SERVER_VARS["SERVER_NAME"]);\r
37 \r
38 define("MUTIME",getmicrotime());\r
39 \r
40 $script = basename($PHP_SELF);\r
41 \r
42 $WikiName = '([A-Z][a-z]+([A-Z][a-z]+)+)';\r
43 $BracketName = '\[\[(\[*[^\s\]]+?\]*)\]\]';\r
44 $InterWikiName = '\[\[(\[*[^\s\]]+?\]*):(\[*[^>\]]+?\]*)\]\]';\r
45 \r
46 //** ÆþÎÏÃͤÎÀ°·Á **\r
47 \r
48 $post = $HTTP_POST_VARS;\r
49 $get = $HTTP_GET_VARS;\r
50 \r
51 if($get["page"]) $get["page"] = rawurldecode($get["page"]);\r
52 if($post["word"]) $post["word"] = rawurldecode($post["word"]);\r
53 if($get["word"]) $get["word"] = rawurldecode($get["word"]);\r
54 if(get_magic_quotes_gpc())\r
55 {\r
56         if($get["page"]) $get["page"] = stripslashes($get["page"]);\r
57         if($post["page"]) $post["page"] = stripslashes($post["page"]);\r
58         if($get["word"]) $get["word"] = stripslashes($get["word"]);\r
59         if($post["word"]) $post["word"] = stripslashes($post["word"]);\r
60         if($post["msg"]) $post["msg"] = stripslashes($post["msg"]);\r
61 }\r
62 if($post["msg"])\r
63 {\r
64         $post["msg"] = preg_replace("/<\/(textarea[^>]*)>/i", "&lt;/$1&gt;", $post["msg"]);\r
65         $post["msg"] = preg_replace("/(\x0D\x0A)/","\n",$post["msg"]);\r
66         $post["msg"] = preg_replace("/(\x0D)/","\n",$post["msg"]);\r
67         $post["msg"] = preg_replace("/(\x0A)/","\n",$post["msg"]);\r
68 }\r
69 \r
70 $vars = array_merge($post,$get);\r
71 $arg = rawurldecode($HTTP_SERVER_VARS["argv"][0]);\r
72 \r
73 //** ½é´ü½èÍý **\r
74 \r
75 $update_exec = "";\r
76 \r
77 // ÀßÄê¥Õ¥¡¥¤¥ë¤ÎÆɹþ\r
78 @require(INI_FILE);\r
79 @require(LANG.".lng");\r
80 \r
81 // ÀßÄê¥Õ¥¡¥¤¥ë¤ÎÊÑ¿ô¥Á¥§¥Ã¥¯\r
82 $wrong_ini_file = "";\r
83 if(!isset($rss_max)) $wrong_ini_file .= '$rss_max ';\r
84 if(!isset($page_title)) $wrong_ini_file .= '$page_title ';\r
85 if(!isset($note_hr)) $wrong_ini_file .= '$note_hr ';\r
86 if(!isset($related_link)) $wrong_ini_file .= '$related_link ';\r
87 if(!isset($show_passage)) $wrong_ini_file .= '$show_passage ';\r
88 if(!isset($rule_related_str)) $wrong_ini_file .= '$rule_related_str ';\r
89 if(!isset($load_template_func)) $wrong_ini_file .= '$load_template_func ';\r
90 if(!defined("LANG")) $wrong_ini_file .= 'LANG ';\r
91 if(!defined("PLUGIN_DIR")) $wrong_ini_file .= 'PLUGIN_DIR ';\r
92 \r
93 if(!is_writable(DATA_DIR))\r
94         die_message("DATA_DIR is not found or not writable.");\r
95 if(!is_writable(DIFF_DIR))\r
96         die_message("DIFF_DIR is not found or not writable.");\r
97 if($do_backup && !is_writable(BACKUP_DIR))\r
98         die_message("BACKUP_DIR is not found or not writable.");\r
99 if(!file_exists(INI_FILE))\r
100         die_message("INI_FILE is not found.");\r
101 if($wrong_ini_file)\r
102         die_message("The setting file runs short of information.<br>The version of a setting file may be old.<br><br>These option are not found : $wrong_ini_file");\r
103 //if(ini_get("register_globals") !== "0")\r
104 //      die_message("Wrong PHP4 setting in 'register_globals',set value 'Off' to httpd.conf or .htaccess.");\r
105 if(!file_exists(SKIN_FILE))\r
106         die_message("SKIN_FILE is not found.");\r
107 if(!file_exists(LANG.".lng"))\r
108         die_message(LANG.".lng(language file) is not found.");\r
109 \r
110 if(!file_exists(get_filename(encode($defaultpage))))\r
111         touch(get_filename(encode($defaultpage)));\r
112 if(!file_exists(get_filename(encode($whatsnew))))\r
113         touch(get_filename(encode($whatsnew)));\r
114 if(!file_exists(get_filename(encode($interwiki))))\r
115         touch(get_filename(encode($interwiki)));\r
116 \r
117 $ins_date = date($date_format,UTIME);\r
118 $ins_time = date($time_format,UTIME);\r
119 $ins_week = "(".$weeklabels[date("w",UTIME)].")";\r
120 \r
121 $now = "$ins_date $ins_week $ins_time";\r
122 \r
123 // ** ¥á¥¤¥ó½èÍý **\r
124 \r
125 // Plug-in hook\r
126 if(isset($vars["plugin"]))\r
127 {\r
128         if(!file_exists(PLUGIN_DIR.$vars["plugin"].".inc.php"))\r
129         {\r
130                 $vars["plugin"] = "";\r
131         }\r
132         else\r
133         {\r
134                 require_once(PLUGIN_DIR.$vars["plugin"].".inc.php");\r
135                 if(!function_exists("plugin_".$vars["plugin"]."_action"))\r
136                 {\r
137                         $vars["plugin"] = "";\r
138                 }\r
139         }\r
140 }\r
141 \r
142 \r
143 // Plug-in action\r
144 if(!empty($vars["plugin"]))\r
145 {\r
146         $retvars = @call_user_func("plugin_".$vars["plugin"]."_action");\r
147         \r
148         $title = strip_bracket($vars["refer"]);\r
149         $page = make_search($vars["refer"]);\r
150         \r
151         if($retvars["msg"])\r
152         {\r
153                 $title =  str_replace("$1",$title,$retvars["msg"]);\r
154                 $page =  str_replace("$1",$page,$retvars["msg"]);\r
155         }\r
156         \r
157         if(!empty($retvars["body"]))\r
158         {\r
159                 $body = $retvars["body"];\r
160         }\r
161         else\r
162         {\r
163                 $cmd = "read";\r
164                 $vars["page"] = $vars["refer"];\r
165                 $body = @join("",@file(get_filename(encode($vars["refer"]))));\r
166                 $body = convert_html($body);\r
167         }\r
168 }\r
169 // °ìÍ÷¤Îɽ¼¨\r
170 else if(arg_check("list"))\r
171 {\r
172         header_lastmod($whatsnew);\r
173         \r
174         $page = $title = $_title_list;\r
175         $body = "<ul>\n" . get_list(false) . "</ul>\n";\r
176 }\r
177 // ¥Õ¥¡¥¤¥ë̾°ìÍ÷¤Îɽ¼¨\r
178 else if(arg_check("filelist"))\r
179 {\r
180         header_lastmod($whatsnew);\r
181 \r
182         $page = $title = $_title_filelist;\r
183         $body = "<ul>\n" . get_list(true) . "</ul>\n";\r
184 }\r
185 // ÊÔ½¸ÉÔ²Äǽ¤Ê¥Ú¡¼¥¸¤òÊÔ½¸¤·¤è¤¦¤È¤·¤¿¤È¤­\r
186 else if(((arg_check("add") || arg_check("edit") || arg_check("preview")) && (is_freeze($vars["page"]) || !is_editable($vars["page"]) || $vars["page"] == "")))\r
187 {\r
188         $body = $title = str_replace('$1',strip_bracket($vars["page"]),$_title_cannotedit);\r
189         $page = str_replace('$1',make_search($vars["page"]),$_title_cannotedit);\r
190 \r
191         if(is_freeze($vars["page"]))\r
192                 $body .= "(<a href=\"$script?cmd=unfreeze&page=".rawurlencode($vars["page"])."\">$_msg_unfreeze</a>)";\r
193 }\r
194 // ÄɲÃ\r
195 else if(arg_check("add"))\r
196 {\r
197         $title = str_replace('$1',strip_bracket($get["page"]),$_title_add);\r
198         $page = str_replace('$1',make_search($get["page"]),$_title_add);\r
199         $body = "<ul>\n";\r
200         $body .= "<li>$_msg_add</li>\n";\r
201         $body .= "</ul>\n";\r
202         $body .= edit_form("",$get["page"],true);\r
203 }\r
204 // ÊÔ½¸\r
205 else if(arg_check("edit"))\r
206 {\r
207         $postdata = @join("",@file(get_filename(encode($get["page"]))));\r
208 \r
209         $title = str_replace('$1',strip_bracket($get["page"]),$_title_edit);\r
210         $page = str_replace('$1',make_search($get["page"]),$_title_edit);\r
211         $body = edit_form($postdata,$get["page"]);\r
212 }\r
213 // ¥×¥ì¥Ó¥å¡¼\r
214 else if(arg_check("preview") || $post["preview"] || $post["template"])\r
215 {\r
216         if($post["template"] && file_exists(get_filename(encode($post["template_page"]))))\r
217         {\r
218                 $post["msg"] = @join("",@file(get_filename(encode($post["template_page"]))));\r
219         }\r
220         \r
221         $post["msg"] = preg_replace("/^#freeze\n/","",$post["msg"]);\r
222         $postdata_input = $post["msg"];\r
223 \r
224         if($post["add"])\r
225         {\r
226                 if($post["add_top"])\r
227                 {\r
228                         $postdata  = $post["msg"];\r
229                         $postdata .= "\n\n";\r
230                         $postdata .= @join("",@file(get_filename(encode($post["page"]))));\r
231                 }\r
232                 else\r
233                 {\r
234                         $postdata  = @join("",@file(get_filename(encode($post["page"]))));\r
235                         $postdata .= "\n\n";\r
236                         $postdata .= $post["msg"];\r
237                 }\r
238         }\r
239         else\r
240         {\r
241                 $postdata = $post["msg"];\r
242         }\r
243 \r
244         $title = str_replace('$1',strip_bracket($post["page"]),$_title_preview);\r
245         $page = str_replace('$1',make_search($post["page"]),$_title_preview);\r
246 \r
247         $body = "$_msg_preview<br>\n";\r
248         if($postdata == "") $body .= "<b>$_msg_preview_delete</b><br>\n";\r
249         else                $body .= "<br>\n";\r
250 \r
251         if($postdata != "")\r
252         {\r
253                 $postdata = convert_html($postdata);\r
254                 \r
255                 $body .= "<table width=\"100%\" bgcolor=\"$preview_color\">\n"\r
256                         ."<tr><td>\n"\r
257                         .$postdata\r
258                         ."\n</td></tr>\n"\r
259                         ."</table>\n";\r
260         }\r
261 \r
262         if($post["add"])\r
263         {\r
264                 if($post["add_top"]) $checked_top = " checked";\r
265                 $addtag = '<input type="hidden" name="add" value="true">';\r
266                 $add_top = '<input type="checkbox" name="add_top" value="true"'.$checked_top.'><small>¥Ú¡¼¥¸¤Î¾å¤ËÄɲÃ</small>';\r
267         }\r
268         if($post["notimestamp"]) $checked_time = "checked";\r
269 \r
270         $body .= "<form action=\"$script\" method=\"post\">\n"\r
271                 ."<input type=\"hidden\" name=\"help\" value=\"$post[add]\">\n"\r
272                 ."<input type=\"hidden\" name=\"page\" value=\"".$post["page"]."\">\n"\r
273                 ."<input type=\"hidden\" name=\"digest\" value=\"".$post["digest"]."\">\n"\r
274                 ."$addtag\n"\r
275                 ."<textarea name=\"msg\" rows=\"$rows\" cols=\"$cols\" wrap=\"virtual\">\n$postdata_input</textarea><br>\n"\r
276                 ."<input type=\"submit\" name=\"preview\" value=\"$_btn_repreview\" accesskey=\"p\">\n"\r
277                 ."<input type=\"submit\" name=\"write\" value=\"$_btn_update\" accesskey=\"s\">\n"\r
278                 ."$add_top\n"\r
279                 ."<input type=\"checkbox\" name=\"notimestamp\" value=\"true\" $checked_time><small>$_btn_notchangetimestamp</small>\n"\r
280                 ."</form>\n";\r
281 }\r
282 // ½ñ¤­¹þ¤ß¤â¤·¤¯¤ÏÄɲä⤷¤¯¤Ï¥³¥á¥ó¥È¤ÎÁÞÆþ\r
283 else if($post["write"])\r
284 {\r
285         $post["msg"] = preg_replace("/^#freeze\n/","",$post["msg"]);\r
286         $postdata_input = $post["msg"];\r
287 \r
288         if($post["add"])\r
289         {\r
290                 if($post["add_top"])\r
291                 {\r
292                         $postdata  = $post["msg"];\r
293                         $postdata .= "\n\n";\r
294                         $postdata .= @join("",@file(get_filename(encode($post["page"]))));\r
295                 }\r
296                 else\r
297                 {\r
298                         $postdata  = @join("",@file(get_filename(encode($post["page"]))));\r
299                         $postdata .= "\n\n";\r
300                         $postdata .= $post["msg"];\r
301                 }\r
302         }\r
303         else\r
304         {\r
305                 $postdata = $post["msg"];\r
306         }\r
307 \r
308         if(md5(@join("",@file(get_filename(encode($post["page"]))))) != $post["digest"])\r
309         {\r
310                 $title = str_replace('$1',strip_bracket($post["page"]),$_title_collided);\r
311                 $page = str_replace('$1',make_search($post["page"]),$_title_collided);\r
312                 \r
313                 $body .= "$_msg_collided\n";\r
314 \r
315                 $body .= "<form action=\"$script?cmd=preview\" method=\"post\">\n"\r
316                         ."<input type=\"hidden\" name=\"page\" value=\"".$post["page"]."\">\n"\r
317                         ."<input type=\"hidden\" name=\"digest\" value=\"".$post["digest"]."\">\n"\r
318                         ."<textarea name=\"msg\" rows=\"$rows\" cols=\"$cols\" wrap=\"virtual\" id=\"textarea\">$postdata_input</textarea><br>\n"\r
319                         ."</form>\n";\r
320         }\r
321         else\r
322         {\r
323                 $postdata = user_rules_str($postdata);\r
324 \r
325                 // º¹Ê¬¥Õ¥¡¥¤¥ë¤ÎºîÀ®\r
326                 if(is_page($post["page"]))\r
327                         $oldpostdata = join("",file(get_filename(encode($post["page"]))));\r
328                 else\r
329                         $oldpostdata = "\n";\r
330                 if($postdata)\r
331                         $diffdata = do_diff($oldpostdata,$postdata);\r
332                 file_write(DIFF_DIR,$post["page"],$diffdata);\r
333 \r
334                 // ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ÎºîÀ®\r
335                 if(is_page($post["page"]))\r
336                         $oldposttime = filemtime(get_filename(encode($post["page"])));\r
337                 else\r
338                         $oldposttime = time();\r
339 \r
340                 // ÊÔ½¸ÆâÍƤ¬²¿¤â½ñ¤«¤ì¤Æ¤¤¤Ê¤¤¤È¥Ð¥Ã¥¯¥¢¥Ã¥×¤âºï½ü¤¹¤ë?¤·¤Ê¤¤¤Ç¤¹¤è¤Í¡£\r
341                 if(!$postdata && $del_backup)\r
342                         backup_delete(BACKUP_DIR.encode($post["page"]).".txt");\r
343                 else if($do_backup && is_page($post["page"]))\r
344                         make_backup(encode($post["page"]).".txt",$oldpostdata,$oldposttime);\r
345 \r
346                 // ¥Õ¥¡¥¤¥ë¤Î½ñ¤­¹þ¤ß\r
347                 file_write(DATA_DIR,$post["page"],$postdata);\r
348 \r
349                 // is_page¤Î¥­¥ã¥Ã¥·¥å¤ò¥¯¥ê¥¢¤¹¤ë¡£\r
350                 is_page($post["page"],true);\r
351 \r
352                 if($postdata)\r
353                 {\r
354                         $title = str_replace('$1',strip_bracket($post["page"]),$_title_updated);\r
355                         $page = str_replace('$1',make_search($post["page"]),$_title_updated);\r
356                         $body = convert_html($postdata);\r
357                 }\r
358                 else\r
359                 {\r
360                         $title = str_replace('$1',strip_bracket($post["page"]),$_title_deleted);\r
361                         $page = str_replace('$1',make_search($post["page"]),$_title_deleted);\r
362                         $body = str_replace('$1',strip_bracket($post["page"]),$_title_deleted);\r
363                 }\r
364         }\r
365 }\r
366 // Åà·ë\r
367 else if(arg_check("freeze") && $vars["page"] && $function_freeze)\r
368 {\r
369         if(is_freeze($vars["page"]))\r
370         {\r
371                 $title = str_replace('$1',strip_bracket($vars["page"]),$_title_isfreezed);\r
372                 $page = str_replace('$1',make_search($vars["page"]),$_title_isfreezed);\r
373                 $body = str_replace('$1',strip_bracket($vars["page"]),$_title_isfreezed);\r
374         }\r
375         else if(md5($post["pass"]) == $adminpass)\r
376         {\r
377                 $postdata = file(get_filename(encode($post["page"])));\r
378                 $postdata = join("",$postdata);\r
379                 $postdata = "#freeze\n".$postdata;\r
380 \r
381                 file_write(DATA_DIR,$vars["page"],$postdata);\r
382 \r
383                 $title = str_replace('$1',strip_bracket($vars["page"]),$_title_freezed);\r
384                 $page = str_replace('$1',make_search($vars["page"]),$_title_freezed);\r
385                 $postdata = join("",file(get_filename(encode($vars["page"]))));\r
386                 $postdata = convert_html($postdata);\r
387 \r
388                 $body = $postdata;\r
389         }\r
390         else\r
391         {\r
392                 $title = str_replace('$1',strip_bracket($vars["page"]),$_title_freeze);\r
393                 $page = str_replace('$1',make_search($vars["page"]),$_title_freeze);\r
394 \r
395                 $body.= "<br>\n";\r
396                 \r
397                 if($post["pass"])\r
398                         $body .= "<b>$_msg_invalidpass</b><br>\n";\r
399                 else\r
400                         $body.= "$_msg_freezing<br>\n";\r
401                 \r
402                 $body.= "<form action=\"$script?cmd=freeze\" method=\"post\">\n";\r
403                 $body.= "<input type=\"hidden\" name=\"page\" value=\"$vars[page]\">\n";\r
404                 $body.= "<input type=\"password\" name=\"pass\" size=\"12\">\n";\r
405                 $body.= "<input type=\"submit\" name=\"ok\" value=\"$_btn_freeze\">\n";\r
406                 $body.= "</form>\n";\r
407         }\r
408 }\r
409 //Åà·ë¤Î²ò½ü\r
410 else if(arg_check("unfreeze") && $vars["page"] && $function_freeze)\r
411 {\r
412         if(!is_freeze($vars["page"]))\r
413         {\r
414                 $title = str_replace('$1',strip_bracket($vars["page"]),$_title_isunfreezed);\r
415                 $page = str_replace('$1',make_search($vars["page"]),$_title_isunfreezed);\r
416                 $body = str_replace('$1',strip_bracket($vars["page"]),$_title_isunfreezed);\r
417         }\r
418         else if(md5($post["pass"]) == $adminpass)\r
419         {\r
420                 $postdata = file(get_filename(encode($post["page"])));\r
421                 array_shift($postdata);\r
422                 $postdata = join("",$postdata);\r
423 \r
424                 file_write(DATA_DIR,$vars["page"],$postdata);\r
425 \r
426                 $title = str_replace('$1',strip_bracket($vars["page"]),$_title_unfreezed);\r
427                 $page = str_replace('$1',make_search($vars["page"]),$_title_unfreezed);\r
428                 \r
429                 $postdata = join("",file(get_filename(encode($vars["page"]))));\r
430                 $postdata = convert_html($postdata);\r
431                 \r
432                 $body = $postdata;\r
433         }\r
434         else\r
435         {\r
436                 $title = str_replace('$1',strip_bracket($vars["page"]),$_title_unfreeze);\r
437                 $page = str_replace('$1',make_search($vars["page"]),$_title_unfreeze);\r
438 \r
439                 $body.= "<br>\n";\r
440 \r
441                 if($post["pass"])\r
442                         $body .= "<b>$_msg_invalidpass</b><br>\n";\r
443                 else\r
444                         $body.= "$_msg_unfreezing<br>\n";\r
445 \r
446                 $body.= "<form action=\"$script?cmd=unfreeze\" method=\"post\">\n";\r
447                 $body.= "<input type=\"hidden\" name=\"page\" value=\"$vars[page]\">\n";\r
448                 $body.= "<input type=\"password\" name=\"pass\" size=\"12\">\n";\r
449                 $body.= "<input type=\"submit\" name=\"ok\" value=\"$_btn_unfreeze\">\n";\r
450                 $body.= "</form>\n";\r
451         }\r
452 }\r
453 // º¹Ê¬¤Îɽ¼¨\r
454 else if(arg_check("diff"))\r
455 {\r
456         $pagename = strip_bracket($get["page"]);\r
457         if(!is_page($get["page"]))\r
458         {\r
459                 $title = $pagename;\r
460                 $page = make_search($vars["page"]);\r
461                 $body = "»ØÄꤵ¤ì¤¿¥Ú¡¼¥¸¤Ï¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£";\r
462         }\r
463         else\r
464         {\r
465                 $link = str_replace('$1',"<a href=\"$script?".rawurlencode($get["page"])."\">$pagename</a>",$_msg_goto);\r
466                 \r
467                 $body =  "<ul>\n"\r
468                         ."<li>$_msg_addline</li>\n"\r
469                         ."<li>$_msg_delline</li>\n"\r
470                         ."<li>$link</li>\n"\r
471                         ."</ul>\n"\r
472                         ."$hr\n";\r
473         }\r
474 \r
475         if(!file_exists(DIFF_DIR.encode($get["page"]).".txt") && is_page($get["page"]))\r
476         {\r
477                 $title = str_replace('$1',strip_bracket($get["page"]),$_title_diff);\r
478                 $page = str_replace('$1',make_search($get["page"]),$_title_diff);\r
479 \r
480                 $diffdata = file(get_filename(encode($get["page"])));\r
481                 $body .= "<font color=\"blue\">\n"\r
482                         ."<pre>\n"\r
483                         .join("",$diffdata)\r
484                         ."\n"\r
485                         ."</pre>\n"\r
486                         ."</font>\n";\r
487         }\r
488         else if(file_exists(DIFF_DIR.encode($get["page"]).".txt"))\r
489         {\r
490                 $title = str_replace('$1',strip_bracket($get["page"]),$_title_diff);\r
491                 $page = str_replace('$1',make_search($get["page"]),$_title_diff);\r
492 \r
493                 $diffdata = file(DIFF_DIR.encode($get["page"]).".txt");\r
494                 $diffdata = preg_replace("/</","&lt;",$diffdata);\r
495                 $diffdata = preg_replace("/>/","&gt;",$diffdata);\r
496                 $diffdata = preg_replace("/^(\-)(.*)/","<font color=\"red\"> $2</font>",$diffdata);\r
497                 $diffdata = preg_replace("/^(\+)(.*)/","<font color=\"blue\"> $2</font>",$diffdata);\r
498                 \r
499                 $body .= "<pre>\n"\r
500                         .join("",$diffdata)\r
501                         ."\n"\r
502                         ."</pre>\n";\r
503         }\r
504 }\r
505 // ¸¡º÷\r
506 else if(arg_check("search"))\r
507 {\r
508         if($vars["word"])\r
509         {\r
510                 $title = $page = str_replace('$1',$vars["word"],$_title_result);\r
511         }\r
512         else\r
513         {\r
514                 $page = $title = $_title_search;\r
515         }\r
516 \r
517         if($vars["word"])\r
518                 $body = do_search($vars["word"],$vars["type"]);\r
519         else\r
520                 $body = "<br>\n$_msg_searching";\r
521 \r
522         if($vars["type"]=="AND" || !$vars["type"]) $and_check = "checked";\r
523         else if($vars["type"]=="OR")               $or_check = "checked";\r
524 \r
525         $body .= "<form action=\"$script?cmd=search\" method=\"post\">\n"\r
526                 ."<input type=\"text\" name=\"word\" size=\"20\" value=\"".$vars["word"]."\">\n"\r
527                 ."<input type=\"radio\" name=\"type\" value=\"AND\" $and_check>$_btn_and\n"\r
528                 ."<input type=\"radio\" name=\"type\" value=\"OR\" $or_check>$_btn_or\n"\r
529                 ."&nbsp;<input type=\"submit\" value=\"$_btn_search\">\n"\r
530                 ."</form>\n";\r
531 }\r
532 // ¥Ð¥Ã¥¯¥¢¥Ã¥×\r
533 else if($do_backup && arg_check("backup"))\r
534 {\r
535         if($get["page"] && $get["age"] && (file_exists(BACKUP_DIR.encode($get["page"]).".txt") || file_exists(BACKUP_DIR.encode($get["page"]).".gz")))\r
536         {\r
537                 $pagename = strip_bracket($get["page"]);\r
538                 $body =  "<ul>\n";\r
539 \r
540                 $body .= "<li><a href=\"$script?cmd=backup\">$_msg_backuplist</a></li>\n";\r
541 \r
542                 if(!arg_check("backup_diff") && is_page($get["page"]))\r
543                 {\r
544                         $link = str_replace('$1',"<a href=\"$script?cmd=backup_diff&page=".rawurlencode($get["page"])."&age=$get[age]\">$_msg_diff</a>",$_msg_view);\r
545                         $body .= "<li>$link</li>\n";\r
546                 }\r
547                 if(!arg_check("backup_nowdiff") && is_page($get["page"]))\r
548                 {\r
549                         $link = str_replace('$1',"<a href=\"$script?cmd=backup_nowdiff&page=".rawurlencode($get["page"])."&age=$get[age]\">$_msg_nowdiff</a>",$_msg_view);\r
550                         $body .= "<li>$link</li>\n";\r
551                 }\r
552                 if(!arg_check("backup_source"))\r
553                 {\r
554                         $link = str_replace('$1',"<a href=\"$script?cmd=backup_source&page=".rawurlencode($get["page"])."&age=$get[age]\">$_msg_source</a>",$_msg_view);\r
555                         $body .= "<li>$link</li>\n";\r
556                 }\r
557                 if(arg_check("backup_diff") || arg_check("backup_source") || arg_check("backup_nowdiff"))\r
558                 {\r
559                         $link = str_replace('$1',"<a href=\"$script?cmd=backup&page=".rawurlencode($get["page"])."&age=$get[age]\">$_msg_backup</a>",$_msg_view);\r
560                         $body .= "<li>$link</li>\n";\r
561                 }\r
562                 \r
563                 if(is_page($get["page"]))\r
564                 {\r
565                         $link = str_replace('$1',"<a href=\"$script?".rawurlencode($get["page"])."\">$pagename</a>",$_msg_goto);\r
566                         $body .=  "<li>$link</li>\n";\r
567                 }\r
568                 else\r
569                 {\r
570                         $link = str_replace('$1',$pagename,$_msg_deleleted);\r
571                         $body .=  "<li>$link</li>\n";\r
572                 }\r
573 \r
574                 $backups = array();\r
575                 $backups = get_backup_info(encode($get["page"]).".txt");\r
576                 if(count($backups)) $body .= "<ul>\n";\r
577                 foreach($backups as $key => $val)\r
578                 {\r
579                         $ins_date = date($date_format,$val);\r
580                         $ins_time = date($time_format,$val);\r
581                         $ins_week = "(".$weeklabels[date("w",$val)].")";\r
582                         $backupdate = "($ins_date $ins_week $ins_time)";\r
583                         if($key != $get["age"])\r
584                                 $body .= "<li><a href=\"$script?cmd=$get[cmd]&page=".rawurlencode($get["page"])."&age=$key\">$key $backupdate</a></li>\n";\r
585                         else\r
586                                 $body .= "<li><i>$key $backupdate</i></li>\n";\r
587                 }\r
588                 if(count($backups)) $body .= "</ul>\n";\r
589                 \r
590                 if(arg_check("backup_diff"))\r
591                 {\r
592                         $title = str_replace('$1',$pagename,$_title_backupdiff)."(No.$get[age])";\r
593                         $page = str_replace('$1',make_search($get["page"]),$_title_backupdiff)."(No.$get[age])";\r
594                         \r
595                         $backupdata = @join("",get_backup($get[age]-1,encode($get["page"]).".txt"));\r
596                         $postdata = @join("",get_backup($get[age],encode($get["page"]).".txt"));\r
597                         $diffdata = split("\n",do_diff($backupdata,$postdata));\r
598                 }\r
599                 else if(arg_check("backup_nowdiff"))\r
600                 {\r
601                         $title = str_replace('$1',$pagename,$_title_backupnowdiff)."(No.$get[age])";\r
602                         $page = str_replace('$1',make_search($get["page"]),$_title_backupnowdiff)."(No.$get[age])";\r
603                         \r
604                         $backupdata = @join("",get_backup($get[age],encode($get["page"]).".txt"));\r
605                         $postdata = @join("",@file(get_filename(encode($get["page"]))));\r
606                         $diffdata = split("\n",do_diff($backupdata,$postdata));\r
607                 }\r
608                 else if(arg_check("backup_source"))\r
609                 {\r
610                         $title = str_replace('$1',$pagename,$_title_backupsource)."(No.$get[age])";\r
611                         $page = str_replace('$1',make_search($get["page"]),$_title_backupsource)."(No.$get[age])";\r
612                         $backupdata = join("",get_backup($get[age],encode($get["page"]).".txt"));\r
613                         \r
614                         $body.="</ul>\n<pre>\n$backupdata</pre>\n";\r
615                 }\r
616                 else\r
617                 {\r
618                         $pagename = strip_bracket($get["page"]);\r
619                         $title = str_replace('$1',$pagename,$_title_backup)."(No.$get[age])";\r
620                         $page = str_replace('$1',make_search($get["page"]),$_title_backup)."(No.$get[age])";\r
621                         $backupdata = join("",get_backup($get[age],encode($get["page"]).".txt"));\r
622                         $backupdata = convert_html($backupdata);\r
623                         $body .= "</ul>\n"\r
624                                 ."$hr\n";\r
625                         $body .= $backupdata;\r
626                 }\r
627                 \r
628                 if(arg_check("backup_diff") || arg_check("backup_nowdiff"))\r
629                 {\r
630                         $diffdata = preg_replace("/</","&lt;",$diffdata);\r
631                         $diffdata = preg_replace("/>/","&gt;",$diffdata);\r
632                         $diffdata = preg_replace("/^(\-)(.*)/","<font color=\"red\"> $2</font>",$diffdata);\r
633                         $diffdata = preg_replace("/^(\+)(.*)/","<font color=\"blue\"> $2</font>",$diffdata);\r
634 \r
635                         $body .= "<br>\n"\r
636                                 ."<li>$_msg_addline</li>\n"\r
637                                 ."<li>$_msg_delline</li>\n"\r
638                                 ."</ul>\n"\r
639                                 ."$hr\n"\r
640                                 ."<pre>\n".join("\n",$diffdata)."</pre>\n";\r
641                 }\r
642         }\r
643         else if($get["page"] && (file_exists(BACKUP_DIR.encode($get["page"]).".txt") || file_exists(BACKUP_DIR.encode($get["page"]).".gz")))\r
644         {\r
645                 $title = str_replace('$1',strip_bracket($get["page"]),$_title_pagebackuplist);\r
646                 $page = str_replace('$1',make_search($get["page"]),$_title_pagebackuplist);\r
647                 $body = get_backup_list($get["page"]);\r
648         }\r
649         else\r
650         {\r
651                 $page = $title = $_title_backuplist;\r
652                 $body = get_backup_list();\r
653         }\r
654 }\r
655 // ¥Ø¥ë¥×¤Îɽ¼¨\r
656 else if(arg_check("help"))\r
657 {\r
658         $title = $page = "¥Ø¥ë¥×";\r
659         $body = catrule();\r
660 }\r
661 // MD5¥Ñ¥¹¥ï¡¼¥É¤Ø¤ÎÊÑ´¹\r
662 else if($vars["md5"])\r
663 {\r
664         $title = $page = "Make password of MD5";\r
665         $body = "$vars[md5] : ".md5($vars["md5"]);\r
666 }\r
667 else if(arg_check("rss"))\r
668 {\r
669         if(!arg_check("rss10"))\r
670                 catrss(1);\r
671         else\r
672                 catrss(2);\r
673         die();\r
674 }\r
675 // ¥Ú¡¼¥¸¤Îɽ¼¨¤ÈInterWikiName¤Î²ò¼á\r
676 else if((arg_check("read") && $vars["page"] != "") || (!arg_check("read") && $arg != "" && $vars["page"] == ""))\r
677 {\r
678         // ¥¢¥¯¥·¥ç¥ó¤òÌÀ¼¨Åª¤Ë»ØÄꤷ¤Æ¤¤¤Ê¤¤¾ì¹ç¥Ú¡¼¥¸Ì¾¤È¤·¤Æ²ò¼á\r
679         if($arg != "" && $vars["page"] == "" && $vars["cmd"] == "")\r
680         {\r
681                 $post["page"] = $arg;\r
682                 $get["page"] = $arg;\r
683                 $vars["page"] = $arg;\r
684         }\r
685         \r
686         // ¥Ú¡¼¥¸Ì¾¤¬WikiName¤Ç¤Ê¤¯¡¢BracketName¤Ç¤Ê¤±¤ì¤ÐBracketName¤È¤·¤Æ²ò¼á\r
687         if(!preg_match("/^(($WikiName)|($BracketName)|($InterWikiName))$/",$get["page"]))\r
688         {\r
689                 $vars["page"] = "[[$vars[page]]]";\r
690                 $get["page"] = $vars["page"];\r
691         }\r
692 \r
693         // WikiName¡¢BracketName¤¬¼¨¤¹¥Ú¡¼¥¸¤òɽ¼¨\r
694         if(is_page($get["page"]))\r
695         {\r
696                 $postdata = join("",file(get_filename(encode($get["page"]))));\r
697                 $postdata = convert_html($postdata);\r
698 \r
699                 $title = strip_bracket($get["page"]);\r
700                 $page = make_search($get["page"]);\r
701                 $body = $postdata;\r
702 \r
703                 header_lastmod($vars["page"]);\r
704         }\r
705         else if(preg_match("/($InterWikiName)/",$get["page"],$match))\r
706         {\r
707         // InterWikiName¤ÎȽÊ̤ȥڡ¼¥¸¤Îɽ¼¨\r
708                 $interwikis = open_interwikiname_list();\r
709                 \r
710                 if(!$interwikis[$match[2]]["url"])\r
711                 {\r
712                         $title = $page = $_title_invalidiwn;\r
713                         $body = str_replace('$1',strip_bracket($get[page]),str_replace('$2',"<a href=\"$script?InterWikiName\">InterWikiName</a>",$_msg_invalidiwn));\r
714                 }\r
715                 else\r
716                 {\r
717                         // Ê¸»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°\r
718                         if($interwikis[$match[2]]["opt"] == "yw")\r
719                         {\r
720                                 // YukiWiki·Ï\r
721                                 if(!preg_match("/$WikiName/",$match[3]))\r
722                                         $match[3] = "[[".mb_convert_encoding($match[3],"SJIS","auto")."]]";\r
723                         }\r
724                         else if($interwikis[$match[2]]["opt"] == "moin")\r
725                         {\r
726                                 // moin·Ï\r
727                                 if(function_exists("mb_convert_encoding"))\r
728                                 {\r
729                                         $match[3] = rawurlencode(mb_convert_encoding($match[3],"EUC-JP","auto"));\r
730                                         $match[3] = str_replace("%","_",$match[3]);\r
731                                 }\r
732                                 else\r
733                                         $not_mb = 1;\r
734                         }\r
735                         else if($interwikis[$match[2]]["opt"] == "" || $interwikis[$match[2]]["opt"] == "std")\r
736                         {\r
737                                 // ÆâÉôʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Î¤Þ¤ÞURL¥¨¥ó¥³¡¼¥É\r
738                                 $match[3] = rawurlencode($match[3]);\r
739                         }\r
740                         else if($interwikis[$match[2]]["opt"] == "asis" || $interwikis[$match[2]]["opt"] == "raw")\r
741                         {\r
742                                 // URL¥¨¥ó¥³¡¼¥É¤·¤Ê¤¤\r
743                                 $match[3] = $match[3];\r
744                         }\r
745                         else if($interwikis[$match[2]]["opt"] != "")\r
746                         {\r
747                                 // ¥¨¥¤¥ê¥¢¥¹¤ÎÊÑ´¹\r
748                                 if($interwikis[$match[2]]["opt"] == "sjis")\r
749                                         $interwikis[$match[2]]["opt"] = "SJIS";\r
750                                 else if($interwikis[$match[2]]["opt"] == "euc")\r
751                                         $interwikis[$match[2]]["opt"] = "EUC-JP";\r
752                                 else if($interwikis[$match[2]]["opt"] == "utf8")\r
753                                         $interwikis[$match[2]]["opt"] = "UTF-8";\r
754 \r
755                                 // ¤½¤Î¾¡¢»ØÄꤵ¤ì¤¿Ê¸»ú¥³¡¼¥É¤Ø¥¨¥ó¥³¡¼¥É¤·¤ÆURL¥¨¥ó¥³¡¼¥É\r
756                                 if(function_exists("mb_convert_encoding"))\r
757                                         $match[3] = rawurlencode(mb_convert_encoding($match[3],$interwikis[$match[2]]["opt"],"auto"));\r
758                                 else\r
759                                         $not_mb = 1;\r
760                         }\r
761 \r
762                         if(strpos($interwikis[$match[2]]["url"],'$1') !== FALSE)\r
763                                 $url = str_replace('$1',$match[3],$interwikis[$match[2]]["url"]);\r
764                         else\r
765                                 $url = $interwikis[$match[2]]["url"] . $match[3];\r
766 \r
767                         if($not_mb)\r
768                         {\r
769                                 $title = $page = "Not support mb_jstring.";\r
770                                 $body = "This server's PHP does not have \"mb_jstring\" module.Cannot convert encoding.";\r
771                         }\r
772                         else\r
773                         {\r
774                                 header("Location: $url");\r
775                                 die();\r
776                         }\r
777                 }\r
778         }\r
779         // WikiName¡¢BracketName¤¬¸«¤Ä¤«¤é¤º¡¢InterWikiName¤Ç¤â¤Ê¤¤¾ì¹ç\r
780         else\r
781         {\r
782                 //$title = strip_bracket($get["page"]);\r
783                 //$page = make_search($get["page"]);\r
784                 //$body = "»ØÄꤵ¤ì¤¿¥Ú¡¼¥¸¤Ï¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£";\r
785 \r
786                 $title = str_replace('$1',strip_bracket($get["page"]),$_title_edit);\r
787                 $page = str_replace('$1',make_search($get["page"]),$_title_edit);\r
788                 $body = edit_form("",$get["page"]);\r
789         }\r
790 }\r
791 // ²¿¤â»ØÄꤵ¤ì¤Ê¤¤¾ì¹ç¡¢¥È¥Ã¥×¥Ú¡¼¥¸¤òɽ¼¨\r
792 else\r
793 {\r
794         $postdata = join("",file(get_filename(encode($defaultpage))));\r
795 \r
796         $vars["page"] = $defaultpage;\r
797         $title = strip_bracket($defaultpage);\r
798         $page = make_search($vars["page"]);\r
799         $body = convert_html($postdata);\r
800 \r
801         header_lastmod($vars["page"]);\r
802 }\r
803 \r
804 // ** ½ÐÎϽèÍý **\r
805 \r
806 catbody($title,$page,$body);\r
807 \r
808 // ** ³Æ¼ï´Ø¿ô **\r
809 \r
810 // ËÜʸ¤ò¥Ú¡¼¥¸Ì¾¤«¤é½ÐÎÏ\r
811 function catbodyall($page,$title="",$pg="")\r
812 {\r
813         if($title === "") $title = strip_bracket($page);\r
814         if($pg === "") $pg = make_search($page);\r
815 \r
816         $body = join("",file(get_filename(encode($page))));\r
817         $body = convert_html($body);\r
818 \r
819         header_lastmod($vars["page"]);\r
820         catbody($title,$pg,$body);\r
821         die();\r
822 }\r
823 \r
824 // ËÜʸ¤ò½ÐÎÏ\r
825 function catbody($title,$page,$body)\r
826 {\r
827         global $script,$vars,$arg,$do_backup,$modifier,$modifierlink,$defaultpage,$whatsnew,$hr;\r
828         global $date_format,$weeklabels,$time_format,$longtaketime,$related_link;\r
829         global $HTTP_SERVER_VARS,$cantedit;\r
830 \r
831         if($vars["page"] && !arg_check("backup") && $vars["page"] != $whatsnew)\r
832         {\r
833                 $is_page = 1;\r
834         }\r
835 \r
836         $link_add = "$script?cmd=add&page=".rawurlencode($vars["page"]);\r
837         $link_edit = "$script?cmd=edit&page=".rawurlencode($vars["page"]);\r
838         $link_diff = "$script?cmd=diff&page=".rawurlencode($vars["page"]);\r
839         $link_top = "$script?$defaultpage";\r
840         $link_list = "$script?cmd=list";\r
841         $link_filelist = "$script?cmd=filelist";\r
842         $link_search = "$script?cmd=search";\r
843         $link_whatsnew = "$script?$whatsnew";\r
844         $link_backup = "$script?cmd=backup&page=".rawurlencode($vars["page"]);\r
845         $link_help = "$script?cmd=help";\r
846 \r
847         if(is_page($vars["page"]) && $is_page)\r
848         {\r
849                 $fmt = @filemtime(get_filename(encode($vars["page"])));\r
850         }\r
851 \r
852         if(is_page($vars["page"]) && $related_link && $is_page && !arg_check("edit") && !arg_check("freeze") && !arg_check("unfreeze"))\r
853         {\r
854                 $related = make_related($vars["page"],false);\r
855         }\r
856 \r
857         if(is_page($vars["page"]) && !in_array($vars["page"],$cantedit) && !arg_check("backup") && !arg_check("edit") && !$vars["preview"])\r
858         {\r
859                 $is_read = TRUE;\r
860         }\r
861 \r
862         //if(!$longtaketime)\r
863                 $longtaketime = getmicrotime() - MUTIME;\r
864         $taketime = sprintf("%01.03f",$longtaketime);\r
865 \r
866         require(SKIN_FILE);\r
867 }\r
868 \r
869 // ¥Õ¥¡¥¤¥ë¤Ø¤Î½ÐÎÏ\r
870 function file_write($dir,$page,$str)\r
871 {\r
872         global $post,$update_exec;\r
873 \r
874         if($str == "")\r
875         {\r
876                 @unlink($dir.encode($page).".txt");\r
877         }\r
878         else\r
879         {\r
880                 if($post["notimestamp"] && is_page($page))\r
881                 {\r
882                         $timestamp = @filemtime($dir.encode($page).".txt");\r
883                 }\r
884                 $fp = fopen($dir.encode($page).".txt","w");\r
885                 while(!flock($fp,LOCK_EX));\r
886                 fputs($fp,$str);\r
887                 flock($fp,LOCK_UN);\r
888                 fclose($fp);\r
889                 if($timestamp)\r
890                         touch($dir.encode($page).".txt",$timestamp);\r
891         }\r
892         \r
893         if(!$timestamp)\r
894                 put_lastmodified();\r
895 \r
896         if($update_exec)\r
897         {\r
898                 system($update_exec." > /dev/null &");\r
899         }\r
900 }\r
901 \r
902 // ¥Ð¥Ã¥¯¥¢¥Ã¥×°ìÍ÷¤Î¼èÆÀ\r
903 function get_backup_list($_page="")\r
904 {\r
905         global $script,$date_format,$time_format,$weeklabels,$cantedit;\r
906         global $_msg_backuplist,$_msg_diff,$_msg_nowdiff,$_msg_source;\r
907 \r
908         $ins_date = date($date_format,$val);\r
909         $ins_time = date($time_format,$val);\r
910         $ins_week = "(".$weeklabels[date("w",$val)].")";\r
911         $ins = "$ins_date $ins_week $ins_time";\r
912 \r
913         if (($dir = @opendir(BACKUP_DIR)) && !$_page)\r
914         {\r
915                 while($file = readdir($dir))\r
916                 {\r
917                         if(function_exists(gzopen))\r
918                                 $file = str_replace(".txt",".gz",$file);\r
919 \r
920                         if($file == ".." || $file == ".") continue;\r
921                         $page = decode(trim(preg_replace("/(\.txt)|(\.gz)$/"," ",$file)));\r
922                         if(in_array($page,$cantedit)) continue;\r
923                         $page_url = rawurlencode($page);\r
924                         $name = $page;\r
925                         $name = strip_bracket($name);\r
926                         if(is_page($page))\r
927                                 $vals[$name]["link"] = "<li><a href=\"$script?$page_url\">$name</a></li>";\r
928                         else\r
929                                 $vals[$name]["link"] = "<li>$name</li>";\r
930                         $vals[$name]["name"] = $page;\r
931                 }\r
932                 closedir($dir);\r
933                 $vals = list_sort($vals);\r
934                 $retvars[] = "<ul>";\r
935         }\r
936         else\r
937         {\r
938                 $page_url = rawurlencode($_page);\r
939                 $name = strip_bracket($_page);\r
940                 $vals[$name]["link"] = "";\r
941                 $vals[$name]["name"] = $_page;\r
942                 $retvars[] = "<ul>";\r
943                 $retvars[] .= "<li><a href=\"$script?cmd=backup\">$_msg_backuplist</a></li>\n";\r
944         }\r
945         \r
946         \r
947         foreach($vals as $page => $line)\r
948         {\r
949                 $arybackups = get_backup_info(encode($line["name"]).".txt");\r
950                 $page_url = rawurlencode($line["name"]);\r
951                 if(count($arybackups)) $line["link"] .= "\n<ul>\n";\r
952                 foreach($arybackups as $key => $val)\r
953                 {\r
954                         $ins_date = date($date_format,$val);\r
955                         $ins_time = date($time_format,$val);\r
956                         $ins_week = "(".$weeklabels[date("w",$val)].")";\r
957                         $backupdate = "($ins_date $ins_week $ins_time)";\r
958                         if(!$_page)\r
959                         {\r
960                                 $line["link"] .= "<li><a href=\"$script?cmd=backup&page=$page_url&age=$key\">$key $backupdate</a></li>\n";\r
961                         }\r
962                         else\r
963                         {\r
964                                 $line["link"] .= "<li><a href=\"$script?cmd=backup&page=$page_url&age=$key\">$key $backupdate</a> [ <a href=\"$script?cmd=backup_diff&page=$page_url&age=$key\">$_msg_diff</a> | <a href=\"$script?cmd=backup_nowdiff&page=$page_url&age=$key\">$_msg_nowdiff</a> | <a href=\"$script?cmd=backup_source&page=$page_url&age=$key\">$_msg_source</a> ]</li>\n";\r
965                         }\r
966                 }\r
967                 if(count($arybackups)) $line["link"] .= "</ul>";\r
968                 $retvars[] = $line["link"];\r
969         }\r
970         $retvars[] = "</ul>";\r
971         \r
972         return join("\n",$retvars);\r
973 }\r
974 \r
975 // ºÇ½ª¹¹¿·¥Ú¡¼¥¸¤Î¹¹¿·\r
976 function put_lastmodified()\r
977 {\r
978         global $script,$maxshow,$whatsnew,$date_format,$time_format,$weeklabels,$post,$non_list;\r
979 \r
980         if($post["notimestamp"]) return;\r
981 \r
982         if ($dir = @opendir(DATA_DIR))\r
983         {\r
984                 while($file = readdir($dir))\r
985                 {\r
986                         $page = decode(trim(preg_replace("/\.txt$/"," ",$file)));\r
987 \r
988                         if($page == $whatsnew || $file == "." || $file == "..") continue;\r
989                         if(preg_match("/$non_list/",$page)) continue;\r
990 \r
991                         if(file_exists(get_filename(encode($page))))\r
992                         {\r
993                                 $page_url = rawurlencode($page);\r
994                                 $lastmodtime = filemtime(get_filename(encode($page)));\r
995                                 $lastmod = date($date_format,$lastmodtime)\r
996                                          . " (" . $weeklabels[date("w",$lastmodtime)] . ") "\r
997                                          . date($time_format,$lastmodtime);\r
998                                 $putval[$lastmodtime][] = "-$lastmod - $page";\r
999                         }\r
1000                 }\r
1001                 closedir($dir);\r
1002         }\r
1003         \r
1004         $cnt = 1;\r
1005         krsort($putval);\r
1006         $fp = fopen(get_filename(encode($whatsnew)),"w");\r
1007         flock($fp,LOCK_EX);\r
1008         foreach($putval as $pages)\r
1009         {\r
1010                 foreach($pages as $page)\r
1011                 {\r
1012                         fputs($fp,$page."\n");\r
1013                         $cnt++;\r
1014                         if($cnt > $maxshow) break;\r
1015                 }\r
1016                 if($cnt > $maxshow) break;\r
1017         }\r
1018         flock($fp,LOCK_EX);\r
1019         fclose($fp);\r
1020 }\r
1021 \r
1022 // ¸¡º÷\r
1023 function do_search($word,$type="AND",$non_format=0)\r
1024 {\r
1025         global $script,$whatsnew,$vars;\r
1026         global $_msg_andresult,$_msg_orresult,$_msg_notfoundresult;\r
1027         \r
1028         $database = array();\r
1029         $retval = array();\r
1030         $cnt = 0;\r
1031 \r
1032         if ($dir = @opendir(DATA_DIR))\r
1033         {\r
1034                 while($file = readdir($dir))\r
1035                 {\r
1036                         if($file == ".." || $file == ".") continue;\r
1037                         $cnt++;\r
1038                         $page = decode(trim(preg_replace("/\.txt$/"," ",$file)));\r
1039                         if($page == $whatsnew) continue;\r
1040                         if($page == $vars["page"] && $non_format) continue;\r
1041                         $data[$page] = file(DATA_DIR.$file);\r
1042                 }\r
1043                 closedir($dir);\r
1044         }\r
1045         \r
1046         $arywords = explode(" ",$word);\r
1047         $result_word = $word;\r
1048         \r
1049         foreach($data as $name => $lines)\r
1050         {\r
1051                 $line = join("\n",$lines);\r
1052                 \r
1053                 $hit = 0;\r
1054                 if(strpos($result_word," ") !== FALSE)\r
1055                 {\r
1056                         foreach($arywords as $word)\r
1057                         {\r
1058                                 if($type=="AND")\r
1059                                 {\r
1060                                         if(strpos($line,$word) === FALSE)\r
1061                                         {\r
1062                                                 $hit = 0;\r
1063                                                 break;\r
1064                                         }\r
1065                                         else\r
1066                                         {\r
1067                                                 $hit = 1;\r
1068                                         }\r
1069                                 }\r
1070                                 else if($type=="OR")\r
1071                                 {\r
1072                                         if(strpos($line,$word) !== FALSE)\r
1073                                                 $hit = 1;\r
1074                                 }\r
1075                         }\r
1076                         if($hit==1 || strpos($name,$word)!==FALSE)\r
1077                         {\r
1078                                 $page_url = rawurlencode($name);\r
1079                                 $word_url = rawurlencode($word);\r
1080                                 $name2 = strip_bracket($name);\r
1081                                 $str = get_pg_passage($name);\r
1082                                 $retval[$name2] = "<li><a href=\"$script?$page_url\">$name2</a>$str</li>";\r
1083                         }\r
1084                 }\r
1085                 else\r
1086                 {\r
1087                         if(stristr($line,$word) || stristr($name,$word))\r
1088                         {\r
1089                                 $page_url = rawurlencode($name);\r
1090                                 $word_url = rawurlencode($word);\r
1091                                 $name2 = strip_bracket($name);\r
1092                                 $link_tag = "<a href=\"$script?$page_url\">$name2</a>";\r
1093                                 $link_tag .= get_pg_passage($name,false);\r
1094                                 if($non_format)\r
1095                                 {\r
1096                                         $tm = @filemtime(get_filename(encode($name)));\r
1097                                         $retval[$tm] = $link_tag;\r
1098                                 }\r
1099                                 else\r
1100                                 {\r
1101                                         $retval[$name2] = "<li>$link_tag</li>";\r
1102                                 }\r
1103                         }\r
1104                 }\r
1105         }\r
1106 \r
1107         if($non_format)\r
1108                 return $retval;\r
1109 \r
1110         $retval = list_sort($retval);\r
1111 \r
1112         if(count($retval) && !$non_format)\r
1113         {\r
1114                 $retvals = "<ul>\n" . join("\n",$retval) . "</ul>\n<br>\n";\r
1115                 \r
1116                 if($type=="AND")\r
1117                         $retvals.= str_replace('$1',$result_word,str_replace('$2',count($retval),str_replace('$3',$cnt,$_msg_andresult)));\r
1118                 else\r
1119                         $retvals.= str_replace('$1',$result_word,str_replace('$2',count($retval),str_replace('$3',$cnt,$_msg_orresult)));\r
1120 \r
1121         }\r
1122         else\r
1123                 $retvals .= str_replace('$1',$result_word,$_msg_notfoundresult);\r
1124         return $retvals;\r
1125 }\r
1126 \r
1127 // º¹Ê¬¤ÎºîÀ®\r
1128 function do_diff($strlines1,$strlines2)\r
1129 {\r
1130         $lines1 = split("\n",$strlines1);\r
1131         $lines2 = split("\n",$strlines2);\r
1132         \r
1133         $same_lines = $diff_lines = $del_lines = $add_lines = $retdiff = array();\r
1134         \r
1135         if(count($lines1) > count($lines2)) { $max_line = count($lines1)+2; }\r
1136         else                                { $max_line = count($lines2)+2; }\r
1137 \r
1138         //$same_lines = array_intersect($lines1,$lines2);\r
1139 \r
1140         $diff_lines = array_diff($lines1,$lines2);\r
1141         $diff_lines = array_merge($diff_lines,array_diff($lines2,$lines1));\r
1142 \r
1143         foreach($diff_lines as $line)\r
1144         {\r
1145                 $index = array_search($line,$lines1);\r
1146                 if($index > -1)\r
1147                 {\r
1148                         $del_lines[$index] = $line;\r
1149                 }\r
1150                 \r
1151                 //$index = array_search($line,$lines2);\r
1152                 //if($index > -1)\r
1153                 //{\r
1154                 //      $add_lines[$index] = $line;\r
1155                 //}\r
1156         }\r
1157 \r
1158         $cnt=0;\r
1159         foreach($lines2 as $line)\r
1160         {\r
1161                 $line = rtrim($line);\r
1162                 \r
1163                 while($del_lines[$cnt])\r
1164                 {\r
1165                         $retdiff[] = "- ".$del_lines[$cnt];\r
1166                         $del_lines[$cnt] = "";\r
1167                         $cnt++;\r
1168                 }\r
1169                 \r
1170                 if(in_array($line,$diff_lines))\r
1171                 {\r
1172                         $retdiff[] = "+ $line";\r
1173                 }\r
1174                 else\r
1175                 {\r
1176                         $retdiff[] = "  $line";\r
1177                 }\r
1178 \r
1179                 $cnt++;\r
1180         }\r
1181         \r
1182         foreach($del_lines as $line)\r
1183         {\r
1184                 if(trim($line))\r
1185                         $retdiff[] = "- $line";\r
1186         }\r
1187 \r
1188         return join("\n",$retdiff);\r
1189 }\r
1190 \r
1191 // °ìÍ÷¤Î¼èÆÀ\r
1192 function get_list($withfilename)\r
1193 {\r
1194         global $script,$list_index,$top,$non_list,$whatsnew;\r
1195         global $_msg_symbol,$_msg_other;\r
1196         \r
1197         $retval = array();\r
1198         if ($dir = @opendir(DATA_DIR))\r
1199         {\r
1200                 while($file = readdir($dir))\r
1201                 {\r
1202                         $page = decode(trim(preg_replace("/\.txt$/"," ",$file)));\r
1203                         if($file == ".." || $file == ".") continue;\r
1204                         if(preg_match("/$non_list/",$page) && !$withfilename) continue;\r
1205                         if($page == $whatsnew) continue;\r
1206                         $page_url = rawurlencode($page);\r
1207                         $page2 = strip_bracket($page);\r
1208                         $pg_passage = get_pg_passage($page);\r
1209                         $retval[$page2] .= "<li><a href=\"$script?$page_url\">$page2</a>$pg_passage</li>\n";\r
1210                         if($withfilename)\r
1211                         {\r
1212                                 $retval[$page2] .= "<ul><li>$file</li></ul>\n";\r
1213                         }\r
1214                 }\r
1215                 closedir($dir);\r
1216         }\r
1217         \r
1218         $retval = list_sort($retval);\r
1219         \r
1220         if($list_index)\r
1221         {\r
1222                 $head_str = "";\r
1223                 $etc_sw = 0;\r
1224                 $symbol_sw = 0;\r
1225                 $top_link = "";\r
1226                 foreach($retval as $page => $link)\r
1227                 {\r
1228                         $head = substr($page,0,1);\r
1229                         if($head_str != $head && !$etc_sw)\r
1230                         {\r
1231                                 $retval2[$page] = "";\r
1232                                 \r
1233                                 if(preg_match("/([A-Z])|([a-z])/",$head,$match))\r
1234                                 {\r
1235                                         if($match[1])\r
1236                                                 $head_nm = "High:$head";\r
1237                                         else\r
1238                                                 $head_nm = "Low:$head";\r
1239                                         \r
1240                                         if($head_str) $retval2[$page] = "</ul>\n";\r
1241                                         $retval2[$page] .= "<li><a href=\"#top:$head_nm\" name=\"$head_nm\"><b>$head</b></a></li>\n<ul>\n";\r
1242                                         $head_str = $head;\r
1243                                         if($top_link) $top_link .= "|";\r
1244                                         $top_link .= "<a href=\"#$head_nm\" name=\"top:$head_nm\"><b>&nbsp;".$head."&nbsp;</b></a>";\r
1245                                 }\r
1246                                 else if(preg_match("/[ -~]/",$head))\r
1247                                 {\r
1248                                         if(!$symbol_sw)\r
1249                                         {\r
1250                                                 if($head_str) $retval2[$page] = "</ul>\n";\r
1251                                                 $retval2[$page] .= "<li><a href=\"#top:symbol\" name=\"symbol\"><b>$_msg_symbol</b></a></li>\n<ul>\n";\r
1252                                                 $head_str = $head;\r
1253                                                 if($top_link) $top_link .= "|";\r
1254                                                 $top_link .= "<a href=\"#symbol\" name=\"top:symbol\"><b>$_msg_symbol</b></a>";\r
1255                                                 $symbol_sw = 1;\r
1256                                         }\r
1257                                 }\r
1258                                 else\r
1259                                 {\r
1260                                         if($head_str) $retval2[$page] = "</ul>\n";\r
1261                                         $retval2[$page] .= "<li><a href=\"#top:etc\" name=\"etc\"><b>$_msg_other</b></a></li>\n<ul>\n";\r
1262                                         $etc_sw = 1;\r
1263                                         if($top_link) $top_link .= "|";\r
1264                                         $top_link .= "<a href=\"#etc\" name=\"top:etc\"><b>$_msg_other</b></a>";\r
1265                                 }\r
1266                         }\r
1267                         $retval2[$page] .= $link;\r
1268                 }\r
1269                 $retval2[] = "</ul>\n";\r
1270                 \r
1271                 $top_link = "<div align=\"center\"><a name=\"top\">$top_link</a></div><br>\n";\r
1272                 \r
1273                 array_unshift($retval2,$top_link);\r
1274         }\r
1275         else\r
1276         {\r
1277                 $retval2 = $retval;\r
1278         }\r
1279         \r
1280         return join("",$retval2);\r
1281 }\r
1282 \r
1283 // ÊÔ½¸¥Õ¥©¡¼¥à¤Îɽ¼¨\r
1284 function edit_form($postdata,$page,$add=0)\r
1285 {\r
1286         global $script,$rows,$cols,$hr,$vars,$function_freeze;\r
1287         global $_btn_addtop,$_btn_preview,$_btn_update,$_btn_freeze,$_msg_help,$_btn_notchangetimestamp;\r
1288         global $whatsnew,$_btn_template,$_btn_load,$non_list,$load_template_func;\r
1289 \r
1290         $digest = md5(@join("",@file(get_filename(encode($page)))));\r
1291 \r
1292         if($add)\r
1293         {\r
1294                 $addtag = '<input type="hidden" name="add" value="true">';\r
1295                 $add_top = '<input type="checkbox" name="add_top" value="true"><small>'.$_btn_addtop.'</small>';\r
1296         }\r
1297 \r
1298         if($vars["help"] == "true")\r
1299                 $help = $hr.catrule();\r
1300         else\r
1301                 $help = "<br>\n<ul><li><a href=\"$script?cmd=edit&help=true&page=".rawurlencode($page)."\">$_msg_help</a></ul></li>\n";\r
1302 \r
1303         if($function_freeze)\r
1304                 $str_freeze = '<input type="submit" name="freeze" value="'.$_btn_freeze.'" accesskey="f">';\r
1305 \r
1306         if($load_template_func)\r
1307         {\r
1308                 $vals = array();\r
1309                 if ($dir = @opendir(DATA_DIR))\r
1310                 {\r
1311                         while($file = readdir($dir))\r
1312                         {\r
1313                                 $pg_org = decode(trim(preg_replace("/\.txt$/"," ",$file)));\r
1314                                 if($file == ".." || $file == "." || $pg_org == $whatsnew) continue;\r
1315                                 if(preg_match("/$non_list/",$pg_org)) continue;\r
1316                                 $name = strip_bracket($pg_org);\r
1317                                 $vals[$name] = "    <option value=\"$pg_org\">$name</option>";\r
1318                         }\r
1319                         closedir($dir);\r
1320                 }\r
1321                 @ksort($vals);\r
1322                 \r
1323                 $template = "   <select name=\"template_page\">\n"\r
1324                            ."    <option value=\"\">-- $_btn_template --</option>\n"\r
1325                            .join("\n",$vals)\r
1326                            ."   </select>\n"\r
1327                            ."   <input type=\"submit\" name=\"template\" value=\"$_btn_load\" accesskey=\"r\"><br>\n";\r
1328 \r
1329                 if($vars["refer"]) $refer = $vars["refer"]."\n\n";\r
1330         }\r
1331 \r
1332 return '\r
1333 <form action="'.$script.'" method="post">\r
1334 <input type="hidden" name="page" value="'.$page.'">\r
1335 <input type="hidden" name="digest" value="'.$digest.'">\r
1336 '.$addtag.'\r
1337 <table cellspacing="3" cellpadding="0" border="0">\r
1338  <tr>\r
1339   <td colspan="2" align="right">\r
1340 '.$template.'\r
1341   </td>\r
1342  </tr>\r
1343  <tr>\r
1344   <td colspan="2" align="right">\r
1345    <textarea name="msg" rows="'.$rows.'" cols="'.$cols.'" wrap="virtual">\r
1346 '.$refer.$postdata.'</textarea>\r
1347   </td>\r
1348  </tr>\r
1349  <tr>\r
1350   <td>\r
1351    <input type="submit" name="preview" value="'.$_btn_preview.'" accesskey="p">\r
1352    <input type="submit" name="write" value="'.$_btn_update.'" accesskey="s">\r
1353    '.$add_top.'\r
1354    <input type="checkbox" name="notimestamp" value="true"><small>'.$_btn_notchangetimestamp.'</small>\r
1355   </td>\r
1356   </form>\r
1357   <form action="'.$script.'?cmd=freeze" method="post">\r
1358    <input type="hidden" name="page" value="'.$vars["page"].'">\r
1359   <td align="right">\r
1360    '.$str_freeze.'\r
1361   </td>\r
1362   </form>\r
1363  </tr>\r
1364 </table>\r
1365 ' . $help;\r
1366 }\r
1367 \r
1368 // ¥Õ¥¡¥¤¥ë̾¤òÆÀ¤ë(¥¨¥ó¥³¡¼¥É¤µ¤ì¤Æ¤¤¤ëɬÍ×Í­¤ê)\r
1369 function get_filename($pagename)\r
1370 {\r
1371         return DATA_DIR.$pagename.".txt";\r
1372 }\r
1373 \r
1374 // ¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¤«¤·¤Ê¤¤¤«\r
1375 function is_page($page,$reload=false)\r
1376 {\r
1377         global $InterWikiName,$_ispage;\r
1378 \r
1379         if(($_ispage[$page] === true || $_ispage[$page] === false) && !$reload) return $_ispage[$page];\r
1380 \r
1381         if(preg_match("/($InterWikiName)/",$page))\r
1382                 $_ispage[$page] = false;\r
1383         else if(!file_exists(get_filename(encode($page))))\r
1384                 $_ispage[$page] = false;\r
1385         else\r
1386                 $_ispage[$page] = true;\r
1387         \r
1388         return $_ispage[$page];\r
1389 }\r
1390 \r
1391 // ¥Ú¡¼¥¸¤¬ÊÔ½¸²Äǽ¤«\r
1392 function is_editable($page)\r
1393 {\r
1394         global $BracketName,$WikiName,$InterWikiName,$cantedit,$_editable;\r
1395 \r
1396         if($_editable === true || $_editable === false) return $_editable;\r
1397 \r
1398         if(preg_match("/^$InterWikiName$/",$page))\r
1399                 $_editable = false;\r
1400         elseif(!preg_match("/^$BracketName$/",$page) && !preg_match("/^$WikiName$/",$page))\r
1401                 $_editable = false;\r
1402         else if(in_array($page,$cantedit))\r
1403                 $_editable = false;\r
1404         else\r
1405                 $_editable = true;\r
1406         \r
1407         return $_editable;\r
1408 }\r
1409 \r
1410 // ¥Ú¡¼¥¸¤¬Åà·ë¤µ¤ì¤Æ¤¤¤ë¤«\r
1411 function is_freeze($page)\r
1412 {\r
1413         global $_freeze;\r
1414 \r
1415         if(!is_page($page)) return false;\r
1416         if($_freeze === true || $_freeze === false) return $_freeze;\r
1417 \r
1418         $lines = file(get_filename(encode($page)));\r
1419         \r
1420         if($lines[0] == "#freeze\n")\r
1421                 $_freeze = true;\r
1422         else\r
1423                 $_freeze = false;\r
1424         \r
1425         return $_freeze;\r
1426 }\r
1427 \r
1428 // ¥×¥í¥°¥é¥à¤Ø¤Î°ú¿ô¤Î¥Á¥§¥Ã¥¯\r
1429 function arg_check($str)\r
1430 {\r
1431         global $arg,$vars;\r
1432 \r
1433         return preg_match("/^".$str."/",$vars["cmd"]);\r
1434 }\r
1435 \r
1436 // ¥Ú¡¼¥¸¥ê¥¹¥È¤Î¥½¡¼¥È\r
1437 function list_sort($values)\r
1438 {\r
1439         if(!is_array($values)) return array();\r
1440         \r
1441         // ksort¤Î¤ß¤À¤È¡¢[[ÆüËܸì]]¡¢[[±Ñʸ»ú]]¡¢±Ñʸ»ú¤Î¤ß¡¢¤Ë½ç¤ËʤÙÂؤ¨¤é¤ì¤ë\r
1442         ksort($values);\r
1443 \r
1444         $vals1 = array();\r
1445         $vals2 = array();\r
1446         $vals3 = array();\r
1447 \r
1448         // ±Ñʸ»ú¤Î¤ß¡¢[[±Ñʸ»ú]]¡¢[[ÆüËܸì]]¡¢¤Î½ç¤ËʤÙÂؤ¨¤ë\r
1449         foreach($values as $key => $val)\r
1450         {\r
1451                 if(preg_match("/\[\[[^\w]+\]\]/",$key))\r
1452                         $vals3[$key] = $val;\r
1453                 else if(preg_match("/\[\[[\W]+\]\]/",$key))\r
1454                         $vals2[$key] = $val;\r
1455                 else\r
1456                         $vals1[$key] = $val;\r
1457         }\r
1458         return array_merge($vals1,$vals2,$vals3);\r
1459 }\r
1460 \r
1461 // ¥Ú¡¼¥¸Ì¾¤Î¥¨¥ó¥³¡¼¥É\r
1462 function encode($key)\r
1463 {\r
1464         $enkey = '';\r
1465         $arych = preg_split("//", $key, -1, PREG_SPLIT_NO_EMPTY);\r
1466         \r
1467         foreach($arych as $ch)\r
1468         {\r
1469                 $enkey .= sprintf("%02X", ord($ch));\r
1470         }\r
1471 \r
1472         return $enkey;\r
1473 }\r
1474 \r
1475 // ¥Õ¥¡¥¤¥ë̾¤Î¥Ç¥³¡¼¥É\r
1476 function decode($key)\r
1477 {\r
1478         $dekey = '';\r
1479         \r
1480         for($i=0;$i<strlen($key);$i+=2)\r
1481         {\r
1482                 $ch = substr($key,$i,2);\r
1483                 $dekey .= chr(intval("0x".$ch,16));\r
1484         }\r
1485         return urldecode($dekey);\r
1486 }\r
1487 \r
1488 // ¥Æ¥­¥¹¥ÈËÜÂΤòHTML¤ËÊÑ´¹¤¹¤ë\r
1489 function convert_html($string)\r
1490 {\r
1491         global $result,$saved,$hr,$script,$page,$vars,$top;\r
1492         global $note_id,$foot_explain,$digest,$note_hr;\r
1493         global $user_rules,$str_rules,$line_rules,$strip_link_wall;\r
1494 \r
1495         global $longtaketime;\r
1496 \r
1497         $string = rtrim($string);\r
1498         $string = preg_replace("/(\x0D\x0A)/","\n",$string);\r
1499         $string = preg_replace("/(\x0D)/","\n",$string);\r
1500         $string = preg_replace("/(\x0A)/","\n",$string);\r
1501 \r
1502         $start_mtime = getmicrotime();\r
1503 \r
1504         $digest = md5(@join("",@file(get_filename(encode($vars["page"])))));\r
1505 \r
1506         $content_id = 0;\r
1507         $user_rules = array_merge($str_rules,$line_rules);\r
1508 \r
1509         $result = array();\r
1510         $saved = array();\r
1511         $arycontents = array();\r
1512 \r
1513         $string = preg_replace("/^#freeze\n/","",$string);\r
1514 \r
1515         $lines = split("\n", $string);\r
1516         $note_id = 1;\r
1517         $foot_explain = array();\r
1518 \r
1519         $table = 0;\r
1520 \r
1521         if(preg_match("/#contents/",$string))\r
1522                 $top_link = "<a href=\"#contents\">$top</a>";\r
1523 \r
1524         foreach ($lines as $line)\r
1525         {\r
1526                 if(!preg_match("/^\/\/(.*)/",$line,$comment_out) && $table != 0)\r
1527                 {\r
1528                         if(!preg_match("/^\|(.+)\|$/",$line,$out))\r
1529                                 array_push($result, "</table>");\r
1530                         if(!$out[1] || $table != count(explode("|",$out[1])))\r
1531                                 $table = 0;\r
1532                 }\r
1533 \r
1534                 $comment_out = $comment_out[1];\r
1535 \r
1536                 if(preg_match("/^(\*{1,3})(.*)/",$line,$out))\r
1537                 {\r
1538                         $result = array_merge($result,$saved); $saved = array();\r
1539                         $str = inline($out[2]);\r
1540                         \r
1541                         $level = strlen($out[1]) + 1;\r
1542                         \r
1543                         array_push($result, "<h$level><a name=\"content:$content_id\">$str</a> $top_link</h$level>");\r
1544                         $arycontents[] = str_repeat("-",$level-1)."<a href=\"#content:$content_id\">".strip_htmltag($str)."</a>\n";\r
1545                         $content_id++;\r
1546                 }\r
1547                 else if(preg_match("/^(-{1,4})(.*)/",$line,$out))\r
1548                 {\r
1549                         if(strlen($out[1]) == 4)\r
1550                         {\r
1551                                 $result = array_merge($result,$saved); $saved = array();\r
1552                                 array_push($result, $hr);\r
1553                         }\r
1554                         else\r
1555                         {\r
1556                                 back_push('ul', strlen($out[1]));\r
1557                                 array_push($result, '<li>' . inline($out[2]) . '</li>');\r
1558                         }\r
1559                 }\r
1560                 else if (preg_match("/^:([^:]+):(.*)/",$line,$out))\r
1561                 {\r
1562                         back_push('dl', 1);\r
1563                         array_push($result, '<dt>' . inline($out[1]) . '</dt>', '<dd>' . inline($out[2]) . '</dd>');\r
1564                 }\r
1565                 else if(preg_match("/^(>{1,3})(.*)/",$line,$out))\r
1566                 {\r
1567                         back_push('blockquote', strlen($out[1]));\r
1568                         array_push($result, ltrim(inline($out[2])));\r
1569                 }\r
1570                 else if (preg_match("/^\s*$/",$line,$out))\r
1571                 {\r
1572                         $result = array_merge($result,$saved); $saved = array();\r
1573                         //array_unshift($saved, "</p>");\r
1574                         array_push($result, "<p>");\r
1575                 }\r
1576                 else if(preg_match("/^(\s+.*)/",$line,$out))\r
1577                 {\r
1578                         back_push('pre', 1);\r
1579                         array_push($result, htmlspecialchars($out[1],ENT_NOQUOTES));\r
1580                 }\r
1581                 else if(preg_match("/^\|(.+)\|$/",$line,$out))\r
1582                 {\r
1583                         $arytable = explode("|",$out[1]);\r
1584 \r
1585                         if(!$table)\r
1586                         {\r
1587                                 $result = array_merge($result,$saved); $saved = array();\r
1588                                 array_push($result,"<table class=\"style_table\" cellspacing=\"1\" border=\"0\">");\r
1589                                 $table = count($arytable);\r
1590                         }\r
1591 \r
1592                         array_push($result,"<tr>");\r
1593                         foreach($arytable as $td)\r
1594                         {\r
1595                                 array_push($result,"<td class=\"style_td\">");\r
1596                                 array_push($result,ltrim(inline($td)));\r
1597                                 array_push($result,"</td>");\r
1598                         }\r
1599                         array_push($result,"</tr>");\r
1600 \r
1601                 }\r
1602                 else if(strlen($comment_out) != 0)\r
1603                 {\r
1604                         array_push($result," <!-- ".htmlspecialchars($comment_out)." -->");\r
1605                 }\r
1606                 else\r
1607                 {\r
1608                         array_push($result, inline($line));\r
1609                 }\r
1610         }\r
1611         if($table) array_push($result, "</table>");\r
1612 \r
1613         $result_last = $result = array_merge($result,$saved); $saved = array();\r
1614 \r
1615         if($content_id != 0)\r
1616         {\r
1617                 $result = array();\r
1618                 $saved = array();\r
1619 \r
1620                 foreach($arycontents as $line)\r
1621                 {\r
1622                         if(preg_match("/^(-{1,3})(.*)/",$line,$out))\r
1623                         {\r
1624                                 back_push('ul', strlen($out[1]));\r
1625                                 array_push($result, '<li>'.$out[2].'</li>');\r
1626                         }\r
1627                 }\r
1628                 $result = array_merge($result,$saved); $saved = array();\r
1629                 \r
1630                 $contents = "<a name=\"contents\"></a>\n";\r
1631                 $contents .= join("\n",$result);\r
1632                 if($strip_link_wall)\r
1633                 {\r
1634                         $contents = preg_replace("/\[\[([^\]]+)\]\]/","$1",$contents);\r
1635                 }\r
1636         }\r
1637 \r
1638         $result_last = inline2($result_last);\r
1639         \r
1640         $result_last = preg_replace("/^#contents/",$contents,$result_last);\r
1641 \r
1642         $str = join("\n", $result_last);\r
1643 \r
1644         if($foot_explain)\r
1645         {\r
1646                 $str .= "\n";\r
1647                 $str .= "$note_hr\n";\r
1648                 //$str .= "<p>\n";\r
1649                 $str .= join("\n",inline2($foot_explain));\r
1650                 //$str .= "</p>\n";\r
1651         }\r
1652 \r
1653         $longtaketime = getmicrotime() - $start_mtime;\r
1654 \r
1655         $str = preg_replace("/&amp;((lt;)|(gt;))/","&$1",$str);\r
1656 \r
1657         return $str;\r
1658 }\r
1659 \r
1660 // $tag¤Î¥¿¥°¤ò$level¥ì¥Ù¥ë¤Þ¤ÇµÍ¤á¤ë¡£\r
1661 function back_push($tag, $level)\r
1662 {\r
1663         global $result,$saved;\r
1664         \r
1665         while (count($saved) > $level) {\r
1666                 array_push($result, array_shift($saved));\r
1667         }\r
1668         if ($saved[0] != "</$tag>") {\r
1669                 $result = array_merge($result,$saved); $saved = array();\r
1670         }\r
1671         while (count($saved) < $level) {\r
1672                 array_unshift($saved, "</$tag>");\r
1673                 array_push($result, "<$tag>");\r
1674         }\r
1675 }\r
1676 \r
1677 // ¥ê¥ó¥¯¤ÎÉղ佤ξ\r
1678 function inline($line)\r
1679 {\r
1680         $line = htmlspecialchars($line);\r
1681 \r
1682         $line = preg_replace("/(\r
1683 \r
1684                                         (\(\(([^\(\)]+)\)\))\r
1685                                         |\r
1686                                         (\(\((.+)\)\))\r
1687 \r
1688                                 )/ex","make_note(\"$1\")",$line);\r
1689 \r
1690         return $line;\r
1691 }\r
1692 \r
1693 // ¥ê¥ó¥¯¤ÎÉղ佤ξ2\r
1694 function inline2($str)\r
1695 {\r
1696         global $WikiName,$BracketName,$InterWikiName,$vars,$related,$related_link,$script;\r
1697         $cnts_plain = array();\r
1698         $cnts_plugin = array();\r
1699         $arykeep = array();\r
1700 \r
1701         for($cnt=0;$cnt<count($str);$cnt++)\r
1702         {\r
1703                 if(preg_match("/^(\s)/",$str[$cnt]))\r
1704                 {\r
1705                         $arykeep[$cnt] = $str[$cnt];\r
1706                         $str[$cnt] = "";\r
1707                         $cnts_plain[] = $cnt;\r
1708                 }\r
1709                 else if(preg_match("/^\#([^\(]+)\(?(.*)\)?$/",$str[$cnt],$match))\r
1710                 {\r
1711                         if(file_exists(PLUGIN_DIR.$match[1].".inc.php"))\r
1712                         {\r
1713                                 require_once(PLUGIN_DIR.$match[1].".inc.php");\r
1714                                 if(function_exists("plugin_".$match[1]."_convert"))\r
1715                                 {\r
1716                                         $aryplugins[$cnt] = $str[$cnt];\r
1717                                         $str[$cnt] = "";\r
1718                                         $cnts_plugin[] = $cnt;\r
1719                                 }\r
1720                         }\r
1721                 }\r
1722         }\r
1723 \r
1724         $str = preg_replace("/'''([^']+?)'''/s","<i>$1</i>",$str);      // Italic\r
1725 \r
1726         $str = preg_replace("/''([^']+?)''/s","<b>$1</b>",$str);        // Bold\r
1727 \r
1728         $str = preg_replace("/\r
1729                 (\r
1730                         (\[\[([^\]]+)\:(https?|ftp|news)(:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\]\])\r
1731                         |\r
1732                         (\[(https?|ftp|news)(:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\s([^\]]+)\])\r
1733                         |\r
1734                         (https?|ftp|news)(:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\r
1735                         |\r
1736                         ([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)\r
1737                         |\r
1738                         (\[\[([^\]]+)\:([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)\]\])\r
1739                         |\r
1740                         ($InterWikiName)\r
1741                         |\r
1742                         ($BracketName)\r
1743                         |\r
1744                         ($WikiName)\r
1745                 )/ex","make_link('$1')",$str);\r
1746 \r
1747         $str = preg_replace("/#related/",make_related($vars["page"],true),$str);\r
1748 \r
1749         $str = make_user_rules($str);\r
1750 \r
1751         $aryplugins = preg_replace("/^\#([^\(]+)$/ex","plugin_convert('$1','$2')",$aryplugins);\r
1752         $aryplugins = preg_replace("/^\#([^\(]+)\((.*)\)$/ex","plugin_convert('$1','$2')",$aryplugins);\r
1753 \r
1754         $tmp = $str;\r
1755         $str = preg_replace("/^#norelated$/","",$str);\r
1756         if($tmp != $str)\r
1757                 $related_link = 0;\r
1758 \r
1759         foreach($cnts_plain as $cnt)\r
1760                 $str[$cnt] = $arykeep[$cnt];\r
1761 \r
1762         foreach($cnts_plugin as $cnt)\r
1763                 $str[$cnt] = $aryplugins[$cnt];\r
1764 \r
1765         return $str;\r
1766 }\r
1767 \r
1768 // Plug-in\r
1769 function plugin_convert($plugin_name,$plugin_args)\r
1770 {\r
1771         $invalid_return = "#${plugin_name}(${plugin_args})";\r
1772         \r
1773         if($plugin_args !== "")\r
1774                 $aryargs = explode(",",$plugin_args);\r
1775         else\r
1776                 $aryargs = array();\r
1777         $retvar = call_user_func_array("plugin_${plugin_name}_convert",$aryargs);\r
1778 \r
1779         if($retvar === FALSE) return $invalid_return;\r
1780         else                  return $retvar;\r
1781 }\r
1782 \r
1783 // ´ØÏ¢¤¹¤ë¥Ú¡¼¥¸\r
1784 function make_related($page,$_isrule)\r
1785 {\r
1786         global $related_str,$rule_related_str,$related,$_make_related,$vars;\r
1787 \r
1788         $page_name = strip_bracket($vars["page"]);\r
1789 \r
1790         if(!is_array($_make_related))\r
1791         {\r
1792                 $aryrelated = do_search($page,"OR",1);\r
1793 \r
1794                 if(is_array($aryrelated))\r
1795                 {\r
1796                         foreach($aryrelated as $key => $val)\r
1797                         {\r
1798                                 $new_arylerated[$key.md5($val)] = $val;\r
1799                         }\r
1800                 }\r
1801 \r
1802                 if(is_array($related))\r
1803                 {\r
1804                         foreach($related as $key => $val)\r
1805                         {\r
1806                                 $new_arylerated[$key.md5($val)] = $val;\r
1807                         }\r
1808                 }\r
1809 \r
1810                 @krsort($new_arylerated);\r
1811                 $_make_related = @array_unique($new_arylerated);\r
1812         }\r
1813 \r
1814         if($_isrule)\r
1815         {\r
1816                 if(is_array($_make_related))\r
1817                 {\r
1818                         foreach($_make_related as $str)\r
1819                         {\r
1820                                 preg_match("/<a\shref=\"([^\"]+)\">([^<]+)<\/a>(.*)/",$str,$out);\r
1821                                 \r
1822                                 if($out[3]) $title = " title=\"$out[2] $out[3]\"";\r
1823                                 \r
1824                                 $aryret[$out[2]] = "<a href=\"$out[1]\"$title>$out[2]</a>";\r
1825                         }\r
1826                         @ksort($aryret);\r
1827                 }\r
1828         }\r
1829         else\r
1830         {\r
1831                 $aryret = $_make_related;\r
1832         }\r
1833 \r
1834         if($_isrule) $str = $rule_related_str;\r
1835         else         $str = $related_str;\r
1836 \r
1837         return @join($str,$aryret);\r
1838 }\r
1839 \r
1840 // Ãí¼á½èÍý\r
1841 function make_note($str)\r
1842 {\r
1843         global $note_id,$foot_explain;\r
1844 \r
1845         $str = preg_replace("/^\(\(/","",$str);\r
1846         $str = preg_replace("/\)\)$/","",$str);\r
1847 \r
1848         $str= str_replace("\\'","'",$str);\r
1849 \r
1850         $str = make_user_rules($str);\r
1851 \r
1852         $foot_explain[] = "<a name=\"notefoot:$note_id\" href=\"#notetext:$note_id\"><sup><small>*$note_id</small></sup></a> <small>$str</small><br />\n";\r
1853         $note =  "<a name=\"notetext:$note_id\" href=\"#notefoot:$note_id\"><sup><small>*$note_id</small></sup></a>";\r
1854         $note_id++;\r
1855 \r
1856         return $note;\r
1857 }\r
1858 \r
1859 // ¥ê¥ó¥¯¤òÉղ乤ë\r
1860 function make_link($name)\r
1861 {\r
1862         global $BracketName,$WikiName,$InterWikiName,$script,$link_target,$interwiki_target;\r
1863         global $related,$show_passage,$vars,$defaultpage;\r
1864 \r
1865         $aryconv_htmlspecial = array("&amp;","&lt;","&gt;");\r
1866         $aryconv_html = array("&","<",">");\r
1867 \r
1868         $page = $name;\r
1869 \r
1870         if(preg_match("/^\[\[([^\]]+)\:((https?|ftp|news)([^\]]+))\]\]$/",$name,$match))\r
1871         {\r
1872                 $match[2] = str_replace($aryconv_htmlspecial,$aryconv_html,$match[2]);\r
1873                 return "<a href=\"$match[2]\" target=\"$link_target\">$match[1]</a>";\r
1874         }\r
1875         else if(preg_match("/^\[((https?|ftp|news)([^\]\s]+))\s([^\]]+)\]$/",$name,$match))\r
1876         {\r
1877                 $match[1] = str_replace($aryconv_htmlspecial,$aryconv_html,$match[1]);\r
1878                 return "<a href=\"$match[1]\" target=\"$link_target\">$match[4]</a>";\r
1879         }\r
1880         else if(preg_match("/^(https?|ftp|news).*?(\.gif|\.png|\.jpeg|\.jpg)?$/",$name,$match))\r
1881         {\r
1882                 $name = str_replace($aryconv_htmlspecial,$aryconv_html,$name);\r
1883                 if($match[2])\r
1884                         return "<a href=\"$name\" target=\"$link_target\"><img src=\"$name\" border=\"0\"></a>";\r
1885                 else\r
1886                         return "<a href=\"$name\" target=\"$link_target\">$page</a>";\r
1887         }\r
1888         else if(preg_match("/^\[\[([^\]]+)\:([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)\]\]/",$name,$match))\r
1889         {\r
1890                 $match[1] = str_replace($aryconv_htmlspecial,$aryconv_html,$match[1]);\r
1891                 $match[2] = str_replace($aryconv_htmlspecial,$aryconv_html,$match[2]);\r
1892 \r
1893                 return "<a href=\"mailto:$match[2]\">$match[1]</a>";\r
1894         }\r
1895         else if(preg_match("/^([[:alnum:]\-_]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)/",$name))\r
1896         {\r
1897                 $name = str_replace($aryconv_htmlspecial,$aryconv_html,$name);\r
1898                 return "<a href=\"mailto:$name\">$page</a>";\r
1899         }\r
1900         else if(preg_match("/^($InterWikiName)$/",str_replace($aryconv_htmlspecial,$aryconv_html,$name)))\r
1901         {\r
1902                 $page = strip_bracket($page);\r
1903                 $percent_name = str_replace($aryconv_htmlspecial,$aryconv_html,$name);\r
1904                 $percent_name = rawurlencode($percent_name);\r
1905 \r
1906                 return "<a href=\"$script?$percent_name\" target=\"$interwiki_target\">$page</a>";\r
1907         }\r
1908         else if(preg_match("/^($BracketName)|($WikiName)$/",str_replace($aryconv_htmlspecial,$aryconv_html,$name)))\r
1909         {\r
1910                 if(preg_match("/^([^>]+)>([^>]+)$/",strip_bracket(str_replace($aryconv_htmlspecial,$aryconv_html,$name)),$match))\r
1911                 {\r
1912                         $page = $match[1];\r
1913                         $name = $match[2];\r
1914                         if(!preg_match("/^($BracketName)|($WikiName)$/",$page))\r
1915                                 $page = "[[$page]]";\r
1916                         if(!preg_match("/^($BracketName)|($WikiName)$/",$name))\r
1917                                 $name = "[[$name]]";\r
1918                 }\r
1919                 \r
1920                 if(preg_match("/^\[\[\.\/([^\]]*)\]\]/",str_replace($aryconv_htmlspecial,$aryconv_html,$name),$match))\r
1921                 {\r
1922                         if(!$match[1])\r
1923                                 $name = $vars["page"];\r
1924                         else\r
1925                                 $name = "[[".strip_bracket($vars[page])."/$match[1]]]";\r
1926                 }\r
1927                 else if(preg_match("/^\[\[\..\/([^\]]+)\]\]/",str_replace($aryconv_htmlspecial,$aryconv_html,$name),$match))\r
1928                 {\r
1929                         for($i=0;$i<substr_count($name,"../");$i++)\r
1930                                 $name = preg_replace("/(.+)\/([^\/]+)$/","$1",strip_bracket($vars["page"]));\r
1931 \r
1932                         if(!preg_match("/^($BracketName)|($WikiName)$/",$name))\r
1933                                 $name = "[[$name]]";\r
1934                         \r
1935                         if($vars["page"]==$name)\r
1936                                 $name = "[[$match[1]]]";\r
1937                         else\r
1938                                 $name = "[[".strip_bracket($name)."/$match[1]]]";\r
1939                 }\r
1940                 else if($name == "[[../]]")\r
1941                 {\r
1942                         $name = preg_replace("/(.+)\/([^\/]+)$/","$1",strip_bracket($vars["page"]));\r
1943                         \r
1944                         if(!preg_match("/^($BracketName)|($WikiName)$/",$name))\r
1945                                 $name = "[[$name]]";\r
1946                         if($vars["page"]==$name)\r
1947                                 $name = $defaultpage;\r
1948                 }\r
1949                 \r
1950                 $page = strip_bracket($page);\r
1951                 $pagename = strip_bracket($name);\r
1952                 $percent_name = str_replace($aryconv_htmlspecial,$aryconv_html,$name);\r
1953                 $percent_name = rawurlencode($percent_name);\r
1954 \r
1955                 $refer = rawurlencode($vars["page"]);\r
1956                 if(is_page($name))\r
1957                 {\r
1958                         $str = get_pg_passage($name,false);\r
1959                         $tm = @filemtime(get_filename(encode($name)));\r
1960                         if($vars["page"] != $name)\r
1961                                 $related[$tm] = "<a href=\"$script?$percent_name\">$pagename</a>$str";\r
1962                         if($show_passage)\r
1963                         {\r
1964                                 $str_title = "title=\"$pagename $str\"";\r
1965                         }\r
1966                         return "<a href=\"$script?$percent_name\" $str_title>$page</a>";\r
1967                 }\r
1968                 else\r
1969                         return "<span class=\"noexists\">$page<a href=\"$script?cmd=edit&page=$percent_name&refer=$refer\">?</a></span>";\r
1970         }\r
1971         else\r
1972         {\r
1973                 return $page;\r
1974         }\r
1975 }\r
1976 \r
1977 // ¥æ¡¼¥¶ÄêµÁ¥ë¡¼¥ë(¥½¡¼¥¹¤òÃÖ´¹¤¹¤ë)\r
1978 function user_rules_str($str)\r
1979 {\r
1980         global $str_rules;\r
1981 \r
1982         $arystr = split("\n",$str);\r
1983 \r
1984         // ÆüÉÕ¡¦»þ¹ïÃÖ´¹½èÍý\r
1985         foreach($arystr as $str)\r
1986         {\r
1987                 if(substr($str,0,1) != " ")\r
1988                 {\r
1989                         foreach($str_rules as $rule => $replace)\r
1990                         {\r
1991                                 $str = preg_replace("/$rule/",$replace,$str);\r
1992                         }\r
1993                 }\r
1994                 $retvars[] = $str;\r
1995         }\r
1996 \r
1997         return join("\n",$retvars);\r
1998 }\r
1999 \r
2000 // ¥æ¡¼¥¶ÄêµÁ¥ë¡¼¥ë(¥½¡¼¥¹¤ÏÃÖ´¹¤»¤º¥³¥ó¥Ð¡¼¥È)\r
2001 function make_user_rules($str)\r
2002 {\r
2003         global $user_rules;\r
2004 \r
2005         foreach($user_rules as $rule => $replace)\r
2006         {\r
2007                 $str = preg_replace("/$rule/",$replace,$str);\r
2008         }\r
2009 \r
2010         return $str;\r
2011 }\r
2012 \r
2013 // InterWikiName List ¤Î²ò¼á(ÊÖÃÍ:£²¼¡¸µÇÛÎó)\r
2014 function open_interwikiname_list()\r
2015 {\r
2016         global $interwiki;\r
2017         \r
2018         $retval = array();\r
2019         $aryinterwikiname = file(get_filename(encode($interwiki)));\r
2020 \r
2021         $cnt = 0;\r
2022         foreach($aryinterwikiname as $line)\r
2023         {\r
2024                 if(preg_match("/\[((https?|ftp|news)(\:\/\/[[:alnum:]\+\$\;\?\.%,!#~\*\/\:@&=_\-]+))\s([^\]]+)\]\s?([^\s]*)/",$line,$match))\r
2025                 {\r
2026                         $retval[$match[4]]["url"] = $match[1];\r
2027                         $retval[$match[4]]["opt"] = $match[5];\r
2028                 }\r
2029         }\r
2030 \r
2031         return $retval;\r
2032 }\r
2033 \r
2034 // zlib´Ø¿ô¤¬»ÈÍѤǤ­¤ì¤Ð¡¢°µ½Ì¤·¤Æ»ÈÍѤ¹¤ë¤¿¤á¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à´Ø¿ô\r
2035 function backup_fopen($filename,$mode)\r
2036 {\r
2037         if(function_exists(gzopen))\r
2038                 return gzopen(str_replace(".txt",".gz",$filename),$mode);\r
2039         else\r
2040                 return fopen($filename,$mode);\r
2041 }\r
2042 function backup_fputs($zp,$str)\r
2043 {\r
2044         if(function_exists(gzputs))\r
2045                 return gzputs($zp,$str);\r
2046         else\r
2047                 return fputs($zp,$str);\r
2048 }\r
2049 function backup_fclose($zp)\r
2050 {\r
2051         if(function_exists(gzclose))\r
2052                 return gzclose($zp);\r
2053         else\r
2054                 return fclose($zp);\r
2055 }\r
2056 function backup_file($filename)\r
2057 {\r
2058         if(function_exists(gzfile))\r
2059                 return @gzfile(str_replace(".txt",".gz",$filename));\r
2060         else\r
2061                 return @file($filename);\r
2062 }\r
2063 function backup_delete($filename)\r
2064 {\r
2065         if(function_exists(gzopen))\r
2066                 return @unlink(str_replace(".txt",".gz",$filename));\r
2067         else\r
2068                 return @unlink($filename);\r
2069 }\r
2070 \r
2071 // ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¡¼¥¿¤òºîÀ®¤¹¤ë\r
2072 function make_backup($filename,$body,$oldtime)\r
2073 {\r
2074         global $splitter,$cycle,$maxage;\r
2075         $aryages = array();\r
2076         $arystrout = array();\r
2077 \r
2078         if(function_exists(gzfile))\r
2079                 $filename = str_replace(".txt",".gz",$filename);\r
2080 \r
2081         $realfilename = BACKUP_DIR.$filename;\r
2082 \r
2083         if(time() - @filemtime($realfilename) > (60 * 60 * $cycle))\r
2084         {\r
2085                 $aryages = read_backup($filename);\r
2086                 if(count($aryages) >= $maxage)\r
2087                 {\r
2088                         array_shift($aryages);\r
2089                 }\r
2090                 \r
2091                 foreach($aryages as $lines)\r
2092                 {\r
2093                         foreach($lines as $key => $line)\r
2094                         {\r
2095                                 if($key && $key == "timestamp")\r
2096                                 {\r
2097                                         $arystrout[] = "$splitter " . rtrim($line);\r
2098                                 }\r
2099                                 else\r
2100                                 {\r
2101                                         $arystrout[] = rtrim($line);\r
2102                                 }\r
2103                         }\r
2104                 }\r
2105 \r
2106                 $strout = join("\n",$arystrout);\r
2107                 if(!preg_match("/\n$/",$strout) && trim($strout)) $strout .= "\n";\r
2108 \r
2109                 $body = "$splitter " . $oldtime . "\n" . $body;\r
2110                 if(!preg_match("/\n$/",$body)) $body .= "\n";\r
2111 \r
2112                 $fp = backup_fopen($realfilename,"w");\r
2113                 backup_fputs($fp,$strout);\r
2114                 backup_fputs($fp,$body);\r
2115                 backup_fclose($fp);\r
2116         }\r
2117         \r
2118         return true;\r
2119 }\r
2120 \r
2121 // ÆÃÄê¤ÎÀ¤Âå¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¡¼¥¿¤ò¼èÆÀ\r
2122 function get_backup($age,$filename)\r
2123 {\r
2124         $aryages = read_backup($filename);\r
2125         \r
2126         foreach($aryages as $key => $lines)\r
2127         {\r
2128                 if($key != $age) continue;\r
2129                 foreach($lines as $key => $line)\r
2130                 {\r
2131                         if($key && $key == "timestamp") continue;\r
2132                         $retvars[] = $line;\r
2133                 }\r
2134         }\r
2135 \r
2136         return $retvars;\r
2137 }\r
2138 \r
2139 // ¥Ð¥Ã¥¯¥¢¥Ã¥×¾ðÊó¤òÊÖ¤¹\r
2140 function get_backup_info($filename)\r
2141 {\r
2142         global $splitter;\r
2143         $lines = array();\r
2144         $retvars = array();\r
2145         $lines = backup_file(BACKUP_DIR.$filename);\r
2146 \r
2147         if(!is_array($lines)) return array();\r
2148 \r
2149         $age = 0;\r
2150         foreach($lines as $line)\r
2151         {\r
2152                 preg_match("/^$splitter\s(\d+)$/",trim($line),$match);\r
2153                 if($match[1])\r
2154                 {\r
2155                         $age++;\r
2156                         $retvars[$age] = $match[1];\r
2157                 }\r
2158         }\r
2159         \r
2160         return $retvars;\r
2161 }\r
2162 \r
2163 // ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¡¼¥¿Á´ÂΤò¼èÆÀ\r
2164 function read_backup($filename)\r
2165 {\r
2166         global $splitter;\r
2167         $lines = array();\r
2168         $lines = backup_file(BACKUP_DIR.$filename);\r
2169 \r
2170         if(!is_array($lines)) return array();\r
2171 \r
2172         $age = 0;\r
2173         foreach($lines as $line)\r
2174         {\r
2175                 preg_match("/^$splitter\s(\d+)$/",trim($line),$match);\r
2176                 if($match[1])\r
2177                 {\r
2178                         $age++;\r
2179                         $retvars[$age]["timestamp"] = $match[1] . "\n";\r
2180                 }\r
2181                 else\r
2182                 {\r
2183                         $retvars[$age][] = $line;\r
2184                 }\r
2185         }\r
2186 \r
2187         return $retvars;\r
2188 }\r
2189 \r
2190 // [[ ]] ¤ò¼è¤ê½ü¤¯\r
2191 function strip_bracket($str)\r
2192 {\r
2193         global $strip_link_wall;\r
2194         \r
2195         if($strip_link_wall)\r
2196         {\r
2197                 preg_match("/^\[\[(.*)\]\]$/",$str,$match);\r
2198                 if($match[1])\r
2199                         $str = $match[1];\r
2200         }\r
2201         return $str;\r
2202 }\r
2203 \r
2204 // HTML¥¿¥°¤ò¼è¤ê½ü¤¯\r
2205 function strip_htmltag($str)\r
2206 {\r
2207         //$str = preg_replace("/<a[^>]+>\?<\/a>/","",$str);\r
2208         return preg_replace("/<[^>]+>/","",$str);\r
2209 }\r
2210 \r
2211 // ¥Æ¥­¥¹¥ÈÀ°·Á¥ë¡¼¥ë¤òɽ¼¨¤¹¤ë\r
2212 function catrule()\r
2213 {\r
2214         global $rule_body;\r
2215         return $rule_body;\r
2216 }\r
2217 \r
2218 // ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë\r
2219 function die_message($msg)\r
2220 {\r
2221         $title = $page = "Runtime error";\r
2222 \r
2223         $body = "<h3>Runtime error</h3>\n";\r
2224         $body .= "<b>Error message : $msg</b>\n";\r
2225 \r
2226         catbody($title,$page,$body);\r
2227 \r
2228         die();\r
2229 }\r
2230 \r
2231 // »ØÄꤵ¤ì¤¿¥Ú¡¼¥¸¤Î·Ð²á»þ¹ï\r
2232 function get_pg_passage($page,$sw=true)\r
2233 {\r
2234         global $_pg_passage,$show_passage;\r
2235 \r
2236         if(!$show_passage) return "";\r
2237 \r
2238         if(isset($_pg_passage[$page]))\r
2239         {\r
2240                 if($sw)\r
2241                         return $_pg_passage[$page]["str"];\r
2242                 else\r
2243                         return $_pg_passage[$page]["label"];\r
2244         }\r
2245         if($pgdt = @filemtime(get_filename(encode($page))))\r
2246         {\r
2247                 $pgdt = UTIME - $pgdt;\r
2248                 if(ceil($pgdt / 60) < 60)\r
2249                         $_pg_passage[$page]["label"] = "(".ceil($pgdt / 60)."m)";\r
2250                 else if(ceil($pgdt / 60 / 60) < 24)\r
2251                         $_pg_passage[$page]["label"] = "(".ceil($pgdt / 60 / 60)."h)";\r
2252                 else\r
2253                         $_pg_passage[$page]["label"] = "(".ceil($pgdt / 60 / 60 / 24)."d)";\r
2254                 \r
2255                 $_pg_passage[$page]["str"] = "<small>".$_pg_passage[$page]["label"]."</small>";\r
2256         }\r
2257         else\r
2258         {\r
2259                 $_pg_passage[$page]["label"] = "";\r
2260                 $_pg_passage[$page]["str"] = "";\r
2261         }\r
2262 \r
2263         if($sw)\r
2264                 return $_pg_passage[$page]["str"];\r
2265         else\r
2266                 return $_pg_passage[$page]["label"];\r
2267 }\r
2268 \r
2269 // ¸½ºß»þ¹ï¤ò¥Þ¥¤¥¯¥íÉäǼèÆÀ\r
2270 function getmicrotime()\r
2271 {\r
2272         list($usec, $sec) = explode(" ",microtime());\r
2273         return ((float)$sec + (float)$usec);\r
2274 }\r
2275 \r
2276 // ¥Ú¡¼¥¸Ì¾¤«¤é¥Ú¡¼¥¸Ì¾¤ò¸¡º÷¤¹¤ë¥ê¥ó¥¯¤òºîÀ®\r
2277 function make_search($page)\r
2278 {\r
2279         global $script,$WikiName;\r
2280 \r
2281         $page = htmlspecialchars($page);\r
2282         $name = strip_bracket($page);\r
2283         $url = rawurlencode($page);\r
2284 \r
2285         //WikiWikiWeb like...\r
2286         //if(preg_match("/^$WikiName$/",$page))\r
2287         //      $name = preg_replace("/([A-Z][a-z]+)/","$1 ",$name);\r
2288 \r
2289         return "<a href=\"$script?cmd=search&word=$url\">$name</a> ";\r
2290 }\r
2291 \r
2292 // Last-Modified ¥Ø¥Ã¥À\r
2293 function header_lastmod($page)\r
2294 {\r
2295         global $lastmod;\r
2296         \r
2297         if($lastmod && is_page($page))\r
2298         {\r
2299                 header("Last-Modified: ".gmdate("D, d M Y H:i:s", filemtime(get_filename(encode($page))))." GMT");\r
2300         }\r
2301 }\r
2302 \r
2303 // RecentChanges ¤Î RSS ¤ò½ÐÎÏ\r
2304 function catrss($rss)\r
2305 {\r
2306         global $rss_max,$page_title,$WikiName,$BracketName,$script,$whatsnew;\r
2307 \r
2308         $lines = file(get_filename(encode($whatsnew)));\r
2309         header("Content-type: application/xml");\r
2310 \r
2311         $item = "";\r
2312         $rdf_li = "";\r
2313         $cnt = 0;\r
2314         foreach($lines as $line)\r
2315         {\r
2316                 if($cnt > $rss_max - 1) break;\r
2317 \r
2318                 if(preg_match("/(($WikiName)|($BracketName))/",$line,$match))\r
2319                 {\r
2320                         if($match[2])\r
2321                         {\r
2322                                 $title = $url = $match[1];\r
2323                         }\r
2324                         else\r
2325                         {\r
2326                                 if(function_exists("mb_convert_encoding"))\r
2327                                         $title = mb_convert_encoding(strip_bracket($match[1]),"UTF-8","auto");\r
2328                                 else\r
2329                                         $title = strip_bracket($match[1]);\r
2330 \r
2331                                 $url = $match[1];\r
2332                         }\r
2333                         \r
2334                         $desc = date("D, d M Y H:i:s T",filemtime(get_filename(encode($match[1]))));\r
2335                         \r
2336                         if($rss==2)\r
2337                                 $items.= "<item rdf:about=\"http://".SERVER_NAME.PHP_SELF."?".rawurlencode($url)."\">\n";\r
2338                         else\r
2339                                 $items.= "<item>\n";\r
2340                         $items.= " <title>$title</title>\n";\r
2341                         $items.= " <link>http://".SERVER_NAME.PHP_SELF."?".rawurlencode($url)."</link>\n";\r
2342                         $items.= " <description>$desc</description>\n";\r
2343                         $items.= "</item>\n\n";\r
2344                         $rdf_li.= "    <rdf:li rdf:resource=\"http://".SERVER_NAME.PHP_SELF."?".rawurlencode($url)."\"/>\n";\r
2345 \r
2346                 }\r
2347 \r
2348                 $cnt++;\r
2349         }\r
2350 \r
2351         if($rss==1)\r
2352         {\r
2353 ?>\r
2354 <?='<?xml version="1.0" encoding="UTF-8"?>'?>\r
2355 \r
2356 \r
2357 <!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"\r
2358             "http://my.netscape.com/publish/formats/rss-0.91.dtd">\r
2359 \r
2360 <rss version="0.91">\r
2361 \r
2362 <channel>\r
2363 <title><?=$page_title?></title>\r
2364 <link><?="http://".SERVER_NAME.PHP_SELF."?$whatsnew"?></link>\r
2365 <description>PukiWiki RecentChanges</description>\r
2366 <language>ja</language>\r
2367 \r
2368 <?=$items?>\r
2369 </channel>\r
2370 </rss>\r
2371 <?\r
2372         }\r
2373         else if($rss==2)\r
2374         {\r
2375 ?>\r
2376 <?='<?xml version="1.0" encoding="utf-8"?>'?>\r
2377 \r
2378 \r
2379 <rdf:RDF \r
2380   xmlns="http://purl.org/rss/1.0/"\r
2381   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" \r
2382   xml:lang="ja">\r
2383 \r
2384  <channel rdf:about="<?="http://".SERVER_NAME.PHP_SELF."?rss"?>">\r
2385   <title><?=$page_title?></title>\r
2386   <link><?="http://".SERVER_NAME.PHP_SELF."?$whatsnew"?></link>\r
2387   <description>PukiWiki RecentChanges</description>\r
2388   <items>\r
2389    <rdf:Seq>\r
2390 <?=$rdf_li?>\r
2391    </rdf:Seq>\r
2392   </items>\r
2393  </channel>\r
2394 \r
2395 <?=$items?>\r
2396 </rdf:RDF>\r
2397 <?\r
2398         }\r
2399 }\r
2400 ?>\r