2 // pukiwiki.php - Yet another WikiWikiWeb clone.
\r
4 // Copyright (C) 2001,2002 by sng.
\r
6 // http://factage.com/sng/pukiwiki/
\r
9 // YukiWiki by Hiroshi Yuki
\r
10 // <hyuki@hyuki.com>
\r
11 // http://www.hyuki.com/yukiwiki/
\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
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
23 //# $Id: pukiwiki.php,v 1.1 2002/06/20 13:59:31 masui Exp $
\r
24 /////////////////////////////////////////////////
\r
26 /////////////////////////////////////////////////
\r
27 // ÀßÄê¥Õ¥¡¥¤¥ë¤Î¾ì½ê
\r
28 define("INI_FILE","./pukiwiki.ini.php");
\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
38 define("MUTIME",getmicrotime());
\r
40 $script = basename($PHP_SELF);
\r
42 $WikiName = '([A-Z][a-z]+([A-Z][a-z]+)+)';
\r
43 $BracketName = '\[\[(\[*[^\s\]]+?\]*)\]\]';
\r
44 $InterWikiName = '\[\[(\[*[^\s\]]+?\]*):(\[*[^>\]]+?\]*)\]\]';
\r
46 //** ÆþÎÏÃͤÎÀ°·Á **
\r
48 $post = $HTTP_POST_VARS;
\r
49 $get = $HTTP_GET_VARS;
\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
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
64 $post["msg"] = preg_replace("/<\/(textarea[^>]*)>/i", "</$1>", $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
70 $vars = array_merge($post,$get);
\r
71 $arg = rawurldecode($HTTP_SERVER_VARS["argv"][0]);
\r
77 // ÀßÄê¥Õ¥¡¥¤¥ë¤ÎÆɹþ
\r
79 @require(LANG.".lng");
\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
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
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
117 $ins_date = date($date_format,UTIME);
\r
118 $ins_time = date($time_format,UTIME);
\r
119 $ins_week = "(".$weeklabels[date("w",UTIME)].")";
\r
121 $now = "$ins_date $ins_week $ins_time";
\r
123 // ** ¥á¥¤¥ó½èÍý **
\r
126 if(isset($vars["plugin"]))
\r
128 if(!file_exists(PLUGIN_DIR.$vars["plugin"].".inc.php"))
\r
130 $vars["plugin"] = "";
\r
134 require_once(PLUGIN_DIR.$vars["plugin"].".inc.php");
\r
135 if(!function_exists("plugin_".$vars["plugin"]."_action"))
\r
137 $vars["plugin"] = "";
\r
144 if(!empty($vars["plugin"]))
\r
146 $retvars = @call_user_func("plugin_".$vars["plugin"]."_action");
\r
148 $title = strip_bracket($vars["refer"]);
\r
149 $page = make_search($vars["refer"]);
\r
151 if($retvars["msg"])
\r
153 $title = str_replace("$1",$title,$retvars["msg"]);
\r
154 $page = str_replace("$1",$page,$retvars["msg"]);
\r
157 if(!empty($retvars["body"]))
\r
159 $body = $retvars["body"];
\r
164 $vars["page"] = $vars["refer"];
\r
165 $body = @join("",@file(get_filename(encode($vars["refer"]))));
\r
166 $body = convert_html($body);
\r
170 else if(arg_check("list"))
\r
172 header_lastmod($whatsnew);
\r
174 $page = $title = $_title_list;
\r
175 $body = "<ul>\n" . get_list(false) . "</ul>\n";
\r
177 // ¥Õ¥¡¥¤¥ë̾°ìÍ÷¤Îɽ¼¨
\r
178 else if(arg_check("filelist"))
\r
180 header_lastmod($whatsnew);
\r
182 $page = $title = $_title_filelist;
\r
183 $body = "<ul>\n" . get_list(true) . "</ul>\n";
\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
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
191 if(is_freeze($vars["page"]))
\r
192 $body .= "(<a href=\"$script?cmd=unfreeze&page=".rawurlencode($vars["page"])."\">$_msg_unfreeze</a>)";
\r
195 else if(arg_check("add"))
\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
200 $body .= "<li>$_msg_add</li>\n";
\r
201 $body .= "</ul>\n";
\r
202 $body .= edit_form("",$get["page"],true);
\r
205 else if(arg_check("edit"))
\r
207 $postdata = @join("",@file(get_filename(encode($get["page"]))));
\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
214 else if(arg_check("preview") || $post["preview"] || $post["template"])
\r
216 if($post["template"] && file_exists(get_filename(encode($post["template_page"]))))
\r
218 $post["msg"] = @join("",@file(get_filename(encode($post["template_page"]))));
\r
221 $post["msg"] = preg_replace("/^#freeze\n/","",$post["msg"]);
\r
222 $postdata_input = $post["msg"];
\r
226 if($post["add_top"])
\r
228 $postdata = $post["msg"];
\r
229 $postdata .= "\n\n";
\r
230 $postdata .= @join("",@file(get_filename(encode($post["page"]))));
\r
234 $postdata = @join("",@file(get_filename(encode($post["page"]))));
\r
235 $postdata .= "\n\n";
\r
236 $postdata .= $post["msg"];
\r
241 $postdata = $post["msg"];
\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
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
251 if($postdata != "")
\r
253 $postdata = convert_html($postdata);
\r
255 $body .= "<table width=\"100%\" bgcolor=\"$preview_color\">\n"
\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
268 if($post["notimestamp"]) $checked_time = "checked";
\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
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
279 ."<input type=\"checkbox\" name=\"notimestamp\" value=\"true\" $checked_time><small>$_btn_notchangetimestamp</small>\n"
\r
282 // ½ñ¤¹þ¤ß¤â¤·¤¯¤ÏÄɲä⤷¤¯¤Ï¥³¥á¥ó¥È¤ÎÁÞÆþ
\r
283 else if($post["write"])
\r
285 $post["msg"] = preg_replace("/^#freeze\n/","",$post["msg"]);
\r
286 $postdata_input = $post["msg"];
\r
290 if($post["add_top"])
\r
292 $postdata = $post["msg"];
\r
293 $postdata .= "\n\n";
\r
294 $postdata .= @join("",@file(get_filename(encode($post["page"]))));
\r
298 $postdata = @join("",@file(get_filename(encode($post["page"]))));
\r
299 $postdata .= "\n\n";
\r
300 $postdata .= $post["msg"];
\r
305 $postdata = $post["msg"];
\r
308 if(md5(@join("",@file(get_filename(encode($post["page"]))))) != $post["digest"])
\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
313 $body .= "$_msg_collided\n";
\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
323 $postdata = user_rules_str($postdata);
\r
325 // º¹Ê¬¥Õ¥¡¥¤¥ë¤ÎºîÀ®
\r
326 if(is_page($post["page"]))
\r
327 $oldpostdata = join("",file(get_filename(encode($post["page"]))));
\r
329 $oldpostdata = "\n";
\r
331 $diffdata = do_diff($oldpostdata,$postdata);
\r
332 file_write(DIFF_DIR,$post["page"],$diffdata);
\r
334 // ¥Ð¥Ã¥¯¥¢¥Ã¥×¤ÎºîÀ®
\r
335 if(is_page($post["page"]))
\r
336 $oldposttime = filemtime(get_filename(encode($post["page"])));
\r
338 $oldposttime = time();
\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
346 // ¥Õ¥¡¥¤¥ë¤Î½ñ¤¹þ¤ß
\r
347 file_write(DATA_DIR,$post["page"],$postdata);
\r
349 // is_page¤Î¥¥ã¥Ã¥·¥å¤ò¥¯¥ê¥¢¤¹¤ë¡£
\r
350 is_page($post["page"],true);
\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
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
367 else if(arg_check("freeze") && $vars["page"] && $function_freeze)
\r
369 if(is_freeze($vars["page"]))
\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
375 else if(md5($post["pass"]) == $adminpass)
\r
377 $postdata = file(get_filename(encode($post["page"])));
\r
378 $postdata = join("",$postdata);
\r
379 $postdata = "#freeze\n".$postdata;
\r
381 file_write(DATA_DIR,$vars["page"],$postdata);
\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
392 $title = str_replace('$1',strip_bracket($vars["page"]),$_title_freeze);
\r
393 $page = str_replace('$1',make_search($vars["page"]),$_title_freeze);
\r
398 $body .= "<b>$_msg_invalidpass</b><br>\n";
\r
400 $body.= "$_msg_freezing<br>\n";
\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
410 else if(arg_check("unfreeze") && $vars["page"] && $function_freeze)
\r
412 if(!is_freeze($vars["page"]))
\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
418 else if(md5($post["pass"]) == $adminpass)
\r
420 $postdata = file(get_filename(encode($post["page"])));
\r
421 array_shift($postdata);
\r
422 $postdata = join("",$postdata);
\r
424 file_write(DATA_DIR,$vars["page"],$postdata);
\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
429 $postdata = join("",file(get_filename(encode($vars["page"]))));
\r
430 $postdata = convert_html($postdata);
\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
442 $body .= "<b>$_msg_invalidpass</b><br>\n";
\r
444 $body.= "$_msg_unfreezing<br>\n";
\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
454 else if(arg_check("diff"))
\r
456 $pagename = strip_bracket($get["page"]);
\r
457 if(!is_page($get["page"]))
\r
459 $title = $pagename;
\r
460 $page = make_search($vars["page"]);
\r
461 $body = "»ØÄꤵ¤ì¤¿¥Ú¡¼¥¸¤Ï¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£";
\r
465 $link = str_replace('$1',"<a href=\"$script?".rawurlencode($get["page"])."\">$pagename</a>",$_msg_goto);
\r
468 ."<li>$_msg_addline</li>\n"
\r
469 ."<li>$_msg_delline</li>\n"
\r
470 ."<li>$link</li>\n"
\r
475 if(!file_exists(DIFF_DIR.encode($get["page"]).".txt") && is_page($get["page"]))
\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
480 $diffdata = file(get_filename(encode($get["page"])));
\r
481 $body .= "<font color=\"blue\">\n"
\r
483 .join("",$diffdata)
\r
488 else if(file_exists(DIFF_DIR.encode($get["page"]).".txt"))
\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
493 $diffdata = file(DIFF_DIR.encode($get["page"]).".txt");
\r
494 $diffdata = preg_replace("/</","<",$diffdata);
\r
495 $diffdata = preg_replace("/>/",">",$diffdata);
\r
496 $diffdata = preg_replace("/^(\-)(.*)/","<font color=\"red\"> $2</font>",$diffdata);
\r
497 $diffdata = preg_replace("/^(\+)(.*)/","<font color=\"blue\"> $2</font>",$diffdata);
\r
500 .join("",$diffdata)
\r
506 else if(arg_check("search"))
\r
510 $title = $page = str_replace('$1',$vars["word"],$_title_result);
\r
514 $page = $title = $_title_search;
\r
518 $body = do_search($vars["word"],$vars["type"]);
\r
520 $body = "<br>\n$_msg_searching";
\r
522 if($vars["type"]=="AND" || !$vars["type"]) $and_check = "checked";
\r
523 else if($vars["type"]=="OR") $or_check = "checked";
\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 ." <input type=\"submit\" value=\"$_btn_search\">\n"
\r
533 else if($do_backup && arg_check("backup"))
\r
535 if($get["page"] && $get["age"] && (file_exists(BACKUP_DIR.encode($get["page"]).".txt") || file_exists(BACKUP_DIR.encode($get["page"]).".gz")))
\r
537 $pagename = strip_bracket($get["page"]);
\r
540 $body .= "<li><a href=\"$script?cmd=backup\">$_msg_backuplist</a></li>\n";
\r
542 if(!arg_check("backup_diff") && is_page($get["page"]))
\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
547 if(!arg_check("backup_nowdiff") && is_page($get["page"]))
\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
552 if(!arg_check("backup_source"))
\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
557 if(arg_check("backup_diff") || arg_check("backup_source") || arg_check("backup_nowdiff"))
\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
563 if(is_page($get["page"]))
\r
565 $link = str_replace('$1',"<a href=\"$script?".rawurlencode($get["page"])."\">$pagename</a>",$_msg_goto);
\r
566 $body .= "<li>$link</li>\n";
\r
570 $link = str_replace('$1',$pagename,$_msg_deleleted);
\r
571 $body .= "<li>$link</li>\n";
\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
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
586 $body .= "<li><i>$key $backupdate</i></li>\n";
\r
588 if(count($backups)) $body .= "</ul>\n";
\r
590 if(arg_check("backup_diff"))
\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
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
599 else if(arg_check("backup_nowdiff"))
\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
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
608 else if(arg_check("backup_source"))
\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
614 $body.="</ul>\n<pre>\n$backupdata</pre>\n";
\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
625 $body .= $backupdata;
\r
628 if(arg_check("backup_diff") || arg_check("backup_nowdiff"))
\r
630 $diffdata = preg_replace("/</","<",$diffdata);
\r
631 $diffdata = preg_replace("/>/",">",$diffdata);
\r
632 $diffdata = preg_replace("/^(\-)(.*)/","<font color=\"red\"> $2</font>",$diffdata);
\r
633 $diffdata = preg_replace("/^(\+)(.*)/","<font color=\"blue\"> $2</font>",$diffdata);
\r
636 ."<li>$_msg_addline</li>\n"
\r
637 ."<li>$_msg_delline</li>\n"
\r
640 ."<pre>\n".join("\n",$diffdata)."</pre>\n";
\r
643 else if($get["page"] && (file_exists(BACKUP_DIR.encode($get["page"]).".txt") || file_exists(BACKUP_DIR.encode($get["page"]).".gz")))
\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
651 $page = $title = $_title_backuplist;
\r
652 $body = get_backup_list();
\r
656 else if(arg_check("help"))
\r
658 $title = $page = "¥Ø¥ë¥×";
\r
661 // MD5¥Ñ¥¹¥ï¡¼¥É¤Ø¤ÎÊÑ´¹
\r
662 else if($vars["md5"])
\r
664 $title = $page = "Make password of MD5";
\r
665 $body = "$vars[md5] : ".md5($vars["md5"]);
\r
667 else if(arg_check("rss"))
\r
669 if(!arg_check("rss10"))
\r
675 // ¥Ú¡¼¥¸¤Îɽ¼¨¤ÈInterWikiName¤Î²ò¼á
\r
676 else if((arg_check("read") && $vars["page"] != "") || (!arg_check("read") && $arg != "" && $vars["page"] == ""))
\r
678 // ¥¢¥¯¥·¥ç¥ó¤òÌÀ¼¨Åª¤Ë»ØÄꤷ¤Æ¤¤¤Ê¤¤¾ì¹ç¥Ú¡¼¥¸Ì¾¤È¤·¤Æ²ò¼á
\r
679 if($arg != "" && $vars["page"] == "" && $vars["cmd"] == "")
\r
681 $post["page"] = $arg;
\r
682 $get["page"] = $arg;
\r
683 $vars["page"] = $arg;
\r
686 // ¥Ú¡¼¥¸Ì¾¤¬WikiName¤Ç¤Ê¤¯¡¢BracketName¤Ç¤Ê¤±¤ì¤ÐBracketName¤È¤·¤Æ²ò¼á
\r
687 if(!preg_match("/^(($WikiName)|($BracketName)|($InterWikiName))$/",$get["page"]))
\r
689 $vars["page"] = "[[$vars[page]]]";
\r
690 $get["page"] = $vars["page"];
\r
693 // WikiName¡¢BracketName¤¬¼¨¤¹¥Ú¡¼¥¸¤òɽ¼¨
\r
694 if(is_page($get["page"]))
\r
696 $postdata = join("",file(get_filename(encode($get["page"]))));
\r
697 $postdata = convert_html($postdata);
\r
699 $title = strip_bracket($get["page"]);
\r
700 $page = make_search($get["page"]);
\r
703 header_lastmod($vars["page"]);
\r
705 else if(preg_match("/($InterWikiName)/",$get["page"],$match))
\r
707 // InterWikiName¤ÎȽÊ̤ȥڡ¼¥¸¤Îɽ¼¨
\r
708 $interwikis = open_interwikiname_list();
\r
710 if(!$interwikis[$match[2]]["url"])
\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
717 // ʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°
\r
718 if($interwikis[$match[2]]["opt"] == "yw")
\r
721 if(!preg_match("/$WikiName/",$match[3]))
\r
722 $match[3] = "[[".mb_convert_encoding($match[3],"SJIS","auto")."]]";
\r
724 else if($interwikis[$match[2]]["opt"] == "moin")
\r
727 if(function_exists("mb_convert_encoding"))
\r
729 $match[3] = rawurlencode(mb_convert_encoding($match[3],"EUC-JP","auto"));
\r
730 $match[3] = str_replace("%","_",$match[3]);
\r
735 else if($interwikis[$match[2]]["opt"] == "" || $interwikis[$match[2]]["opt"] == "std")
\r
737 // ÆâÉôʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Î¤Þ¤ÞURL¥¨¥ó¥³¡¼¥É
\r
738 $match[3] = rawurlencode($match[3]);
\r
740 else if($interwikis[$match[2]]["opt"] == "asis" || $interwikis[$match[2]]["opt"] == "raw")
\r
742 // URL¥¨¥ó¥³¡¼¥É¤·¤Ê¤¤
\r
743 $match[3] = $match[3];
\r
745 else if($interwikis[$match[2]]["opt"] != "")
\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
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
762 if(strpos($interwikis[$match[2]]["url"],'$1') !== FALSE)
\r
763 $url = str_replace('$1',$match[3],$interwikis[$match[2]]["url"]);
\r
765 $url = $interwikis[$match[2]]["url"] . $match[3];
\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
774 header("Location: $url");
\r
779 // WikiName¡¢BracketName¤¬¸«¤Ä¤«¤é¤º¡¢InterWikiName¤Ç¤â¤Ê¤¤¾ì¹ç
\r
782 //$title = strip_bracket($get["page"]);
\r
783 //$page = make_search($get["page"]);
\r
784 //$body = "»ØÄꤵ¤ì¤¿¥Ú¡¼¥¸¤Ï¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£";
\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
791 // ²¿¤â»ØÄꤵ¤ì¤Ê¤¤¾ì¹ç¡¢¥È¥Ã¥×¥Ú¡¼¥¸¤òɽ¼¨
\r
794 $postdata = join("",file(get_filename(encode($defaultpage))));
\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
801 header_lastmod($vars["page"]);
\r
806 catbody($title,$page,$body);
\r
810 // ËÜʸ¤ò¥Ú¡¼¥¸Ì¾¤«¤é½ÐÎÏ
\r
811 function catbodyall($page,$title="",$pg="")
\r
813 if($title === "") $title = strip_bracket($page);
\r
814 if($pg === "") $pg = make_search($page);
\r
816 $body = join("",file(get_filename(encode($page))));
\r
817 $body = convert_html($body);
\r
819 header_lastmod($vars["page"]);
\r
820 catbody($title,$pg,$body);
\r
825 function catbody($title,$page,$body)
\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
831 if($vars["page"] && !arg_check("backup") && $vars["page"] != $whatsnew)
\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
847 if(is_page($vars["page"]) && $is_page)
\r
849 $fmt = @filemtime(get_filename(encode($vars["page"])));
\r
852 if(is_page($vars["page"]) && $related_link && $is_page && !arg_check("edit") && !arg_check("freeze") && !arg_check("unfreeze"))
\r
854 $related = make_related($vars["page"],false);
\r
857 if(is_page($vars["page"]) && !in_array($vars["page"],$cantedit) && !arg_check("backup") && !arg_check("edit") && !$vars["preview"])
\r
862 //if(!$longtaketime)
\r
863 $longtaketime = getmicrotime() - MUTIME;
\r
864 $taketime = sprintf("%01.03f",$longtaketime);
\r
866 require(SKIN_FILE);
\r
869 // ¥Õ¥¡¥¤¥ë¤Ø¤Î½ÐÎÏ
\r
870 function file_write($dir,$page,$str)
\r
872 global $post,$update_exec;
\r
876 @unlink($dir.encode($page).".txt");
\r
880 if($post["notimestamp"] && is_page($page))
\r
882 $timestamp = @filemtime($dir.encode($page).".txt");
\r
884 $fp = fopen($dir.encode($page).".txt","w");
\r
885 while(!flock($fp,LOCK_EX));
\r
887 flock($fp,LOCK_UN);
\r
890 touch($dir.encode($page).".txt",$timestamp);
\r
894 put_lastmodified();
\r
898 system($update_exec." > /dev/null &");
\r
902 // ¥Ð¥Ã¥¯¥¢¥Ã¥×°ìÍ÷¤Î¼èÆÀ
\r
903 function get_backup_list($_page="")
\r
905 global $script,$date_format,$time_format,$weeklabels,$cantedit;
\r
906 global $_msg_backuplist,$_msg_diff,$_msg_nowdiff,$_msg_source;
\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
913 if (($dir = @opendir(BACKUP_DIR)) && !$_page)
\r
915 while($file = readdir($dir))
\r
917 if(function_exists(gzopen))
\r
918 $file = str_replace(".txt",".gz",$file);
\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
925 $name = strip_bracket($name);
\r
927 $vals[$name]["link"] = "<li><a href=\"$script?$page_url\">$name</a></li>";
\r
929 $vals[$name]["link"] = "<li>$name</li>";
\r
930 $vals[$name]["name"] = $page;
\r
933 $vals = list_sort($vals);
\r
934 $retvars[] = "<ul>";
\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
947 foreach($vals as $page => $line)
\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
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
960 $line["link"] .= "<li><a href=\"$script?cmd=backup&page=$page_url&age=$key\">$key $backupdate</a></li>\n";
\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
967 if(count($arybackups)) $line["link"] .= "</ul>";
\r
968 $retvars[] = $line["link"];
\r
970 $retvars[] = "</ul>";
\r
972 return join("\n",$retvars);
\r
975 // ºÇ½ª¹¹¿·¥Ú¡¼¥¸¤Î¹¹¿·
\r
976 function put_lastmodified()
\r
978 global $script,$maxshow,$whatsnew,$date_format,$time_format,$weeklabels,$post,$non_list;
\r
980 if($post["notimestamp"]) return;
\r
982 if ($dir = @opendir(DATA_DIR))
\r
984 while($file = readdir($dir))
\r
986 $page = decode(trim(preg_replace("/\.txt$/"," ",$file)));
\r
988 if($page == $whatsnew || $file == "." || $file == "..") continue;
\r
989 if(preg_match("/$non_list/",$page)) continue;
\r
991 if(file_exists(get_filename(encode($page))))
\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
1006 $fp = fopen(get_filename(encode($whatsnew)),"w");
\r
1007 flock($fp,LOCK_EX);
\r
1008 foreach($putval as $pages)
\r
1010 foreach($pages as $page)
\r
1012 fputs($fp,$page."\n");
\r
1014 if($cnt > $maxshow) break;
\r
1016 if($cnt > $maxshow) break;
\r
1018 flock($fp,LOCK_EX);
\r
1023 function do_search($word,$type="AND",$non_format=0)
\r
1025 global $script,$whatsnew,$vars;
\r
1026 global $_msg_andresult,$_msg_orresult,$_msg_notfoundresult;
\r
1028 $database = array();
\r
1029 $retval = array();
\r
1032 if ($dir = @opendir(DATA_DIR))
\r
1034 while($file = readdir($dir))
\r
1036 if($file == ".." || $file == ".") continue;
\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
1046 $arywords = explode(" ",$word);
\r
1047 $result_word = $word;
\r
1049 foreach($data as $name => $lines)
\r
1051 $line = join("\n",$lines);
\r
1054 if(strpos($result_word," ") !== FALSE)
\r
1056 foreach($arywords as $word)
\r
1060 if(strpos($line,$word) === FALSE)
\r
1070 else if($type=="OR")
\r
1072 if(strpos($line,$word) !== FALSE)
\r
1076 if($hit==1 || strpos($name,$word)!==FALSE)
\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
1087 if(stristr($line,$word) || stristr($name,$word))
\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
1096 $tm = @filemtime(get_filename(encode($name)));
\r
1097 $retval[$tm] = $link_tag;
\r
1101 $retval[$name2] = "<li>$link_tag</li>";
\r
1110 $retval = list_sort($retval);
\r
1112 if(count($retval) && !$non_format)
\r
1114 $retvals = "<ul>\n" . join("\n",$retval) . "</ul>\n<br>\n";
\r
1117 $retvals.= str_replace('$1',$result_word,str_replace('$2',count($retval),str_replace('$3',$cnt,$_msg_andresult)));
\r
1119 $retvals.= str_replace('$1',$result_word,str_replace('$2',count($retval),str_replace('$3',$cnt,$_msg_orresult)));
\r
1123 $retvals .= str_replace('$1',$result_word,$_msg_notfoundresult);
\r
1128 function do_diff($strlines1,$strlines2)
\r
1130 $lines1 = split("\n",$strlines1);
\r
1131 $lines2 = split("\n",$strlines2);
\r
1133 $same_lines = $diff_lines = $del_lines = $add_lines = $retdiff = array();
\r
1135 if(count($lines1) > count($lines2)) { $max_line = count($lines1)+2; }
\r
1136 else { $max_line = count($lines2)+2; }
\r
1138 //$same_lines = array_intersect($lines1,$lines2);
\r
1140 $diff_lines = array_diff($lines1,$lines2);
\r
1141 $diff_lines = array_merge($diff_lines,array_diff($lines2,$lines1));
\r
1143 foreach($diff_lines as $line)
\r
1145 $index = array_search($line,$lines1);
\r
1148 $del_lines[$index] = $line;
\r
1151 //$index = array_search($line,$lines2);
\r
1154 // $add_lines[$index] = $line;
\r
1159 foreach($lines2 as $line)
\r
1161 $line = rtrim($line);
\r
1163 while($del_lines[$cnt])
\r
1165 $retdiff[] = "- ".$del_lines[$cnt];
\r
1166 $del_lines[$cnt] = "";
\r
1170 if(in_array($line,$diff_lines))
\r
1172 $retdiff[] = "+ $line";
\r
1176 $retdiff[] = " $line";
\r
1182 foreach($del_lines as $line)
\r
1185 $retdiff[] = "- $line";
\r
1188 return join("\n",$retdiff);
\r
1192 function get_list($withfilename)
\r
1194 global $script,$list_index,$top,$non_list,$whatsnew;
\r
1195 global $_msg_symbol,$_msg_other;
\r
1197 $retval = array();
\r
1198 if ($dir = @opendir(DATA_DIR))
\r
1200 while($file = readdir($dir))
\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
1212 $retval[$page2] .= "<ul><li>$file</li></ul>\n";
\r
1218 $retval = list_sort($retval);
\r
1226 foreach($retval as $page => $link)
\r
1228 $head = substr($page,0,1);
\r
1229 if($head_str != $head && !$etc_sw)
\r
1231 $retval2[$page] = "";
\r
1233 if(preg_match("/([A-Z])|([a-z])/",$head,$match))
\r
1236 $head_nm = "High:$head";
\r
1238 $head_nm = "Low:$head";
\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> ".$head." </b></a>";
\r
1246 else if(preg_match("/[ -~]/",$head))
\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
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
1263 if($top_link) $top_link .= "|";
\r
1264 $top_link .= "<a href=\"#etc\" name=\"top:etc\"><b>$_msg_other</b></a>";
\r
1267 $retval2[$page] .= $link;
\r
1269 $retval2[] = "</ul>\n";
\r
1271 $top_link = "<div align=\"center\"><a name=\"top\">$top_link</a></div><br>\n";
\r
1273 array_unshift($retval2,$top_link);
\r
1277 $retval2 = $retval;
\r
1280 return join("",$retval2);
\r
1283 // ÊÔ½¸¥Õ¥©¡¼¥à¤Îɽ¼¨
\r
1284 function edit_form($postdata,$page,$add=0)
\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
1290 $digest = md5(@join("",@file(get_filename(encode($page)))));
\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
1298 if($vars["help"] == "true")
\r
1299 $help = $hr.catrule();
\r
1301 $help = "<br>\n<ul><li><a href=\"$script?cmd=edit&help=true&page=".rawurlencode($page)."\">$_msg_help</a></ul></li>\n";
\r
1303 if($function_freeze)
\r
1304 $str_freeze = '<input type="submit" name="freeze" value="'.$_btn_freeze.'" accesskey="f">';
\r
1306 if($load_template_func)
\r
1309 if ($dir = @opendir(DATA_DIR))
\r
1311 while($file = readdir($dir))
\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
1323 $template = " <select name=\"template_page\">\n"
\r
1324 ." <option value=\"\">-- $_btn_template --</option>\n"
\r
1327 ." <input type=\"submit\" name=\"template\" value=\"$_btn_load\" accesskey=\"r\"><br>\n";
\r
1329 if($vars["refer"]) $refer = $vars["refer"]."\n\n";
\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
1337 <table cellspacing="3" cellpadding="0" border="0">
\r
1339 <td colspan="2" align="right">
\r
1344 <td colspan="2" align="right">
\r
1345 <textarea name="msg" rows="'.$rows.'" cols="'.$cols.'" wrap="virtual">
\r
1346 '.$refer.$postdata.'</textarea>
\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
1354 <input type="checkbox" name="notimestamp" value="true"><small>'.$_btn_notchangetimestamp.'</small>
\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
1368 // ¥Õ¥¡¥¤¥ë̾¤òÆÀ¤ë(¥¨¥ó¥³¡¼¥É¤µ¤ì¤Æ¤¤¤ëɬÍ×ͤê)
\r
1369 function get_filename($pagename)
\r
1371 return DATA_DIR.$pagename.".txt";
\r
1374 // ¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¤«¤·¤Ê¤¤¤«
\r
1375 function is_page($page,$reload=false)
\r
1377 global $InterWikiName,$_ispage;
\r
1379 if(($_ispage[$page] === true || $_ispage[$page] === false) && !$reload) return $_ispage[$page];
\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
1386 $_ispage[$page] = true;
\r
1388 return $_ispage[$page];
\r
1391 // ¥Ú¡¼¥¸¤¬ÊÔ½¸²Äǽ¤«
\r
1392 function is_editable($page)
\r
1394 global $BracketName,$WikiName,$InterWikiName,$cantedit,$_editable;
\r
1396 if($_editable === true || $_editable === false) return $_editable;
\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
1405 $_editable = true;
\r
1407 return $_editable;
\r
1410 // ¥Ú¡¼¥¸¤¬Åà·ë¤µ¤ì¤Æ¤¤¤ë¤«
\r
1411 function is_freeze($page)
\r
1415 if(!is_page($page)) return false;
\r
1416 if($_freeze === true || $_freeze === false) return $_freeze;
\r
1418 $lines = file(get_filename(encode($page)));
\r
1420 if($lines[0] == "#freeze\n")
\r
1428 // ¥×¥í¥°¥é¥à¤Ø¤Î°ú¿ô¤Î¥Á¥§¥Ã¥¯
\r
1429 function arg_check($str)
\r
1431 global $arg,$vars;
\r
1433 return preg_match("/^".$str."/",$vars["cmd"]);
\r
1436 // ¥Ú¡¼¥¸¥ê¥¹¥È¤Î¥½¡¼¥È
\r
1437 function list_sort($values)
\r
1439 if(!is_array($values)) return array();
\r
1441 // ksort¤Î¤ß¤À¤È¡¢[[ÆüËܸì]]¡¢[[±Ñʸ»ú]]¡¢±Ñʸ»ú¤Î¤ß¡¢¤Ë½ç¤ËʤÙÂؤ¨¤é¤ì¤ë
\r
1448 // ±Ñʸ»ú¤Î¤ß¡¢[[±Ñʸ»ú]]¡¢[[ÆüËܸì]]¡¢¤Î½ç¤ËʤÙÂؤ¨¤ë
\r
1449 foreach($values as $key => $val)
\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
1456 $vals1[$key] = $val;
\r
1458 return array_merge($vals1,$vals2,$vals3);
\r
1461 // ¥Ú¡¼¥¸Ì¾¤Î¥¨¥ó¥³¡¼¥É
\r
1462 function encode($key)
\r
1465 $arych = preg_split("//", $key, -1, PREG_SPLIT_NO_EMPTY);
\r
1467 foreach($arych as $ch)
\r
1469 $enkey .= sprintf("%02X", ord($ch));
\r
1475 // ¥Õ¥¡¥¤¥ë̾¤Î¥Ç¥³¡¼¥É
\r
1476 function decode($key)
\r
1480 for($i=0;$i<strlen($key);$i+=2)
\r
1482 $ch = substr($key,$i,2);
\r
1483 $dekey .= chr(intval("0x".$ch,16));
\r
1485 return urldecode($dekey);
\r
1488 // ¥Æ¥¥¹¥ÈËÜÂΤòHTML¤ËÊÑ´¹¤¹¤ë
\r
1489 function convert_html($string)
\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
1495 global $longtaketime;
\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
1502 $start_mtime = getmicrotime();
\r
1504 $digest = md5(@join("",@file(get_filename(encode($vars["page"])))));
\r
1507 $user_rules = array_merge($str_rules,$line_rules);
\r
1509 $result = array();
\r
1511 $arycontents = array();
\r
1513 $string = preg_replace("/^#freeze\n/","",$string);
\r
1515 $lines = split("\n", $string);
\r
1517 $foot_explain = array();
\r
1521 if(preg_match("/#contents/",$string))
\r
1522 $top_link = "<a href=\"#contents\">$top</a>";
\r
1524 foreach ($lines as $line)
\r
1526 if(!preg_match("/^\/\/(.*)/",$line,$comment_out) && $table != 0)
\r
1528 if(!preg_match("/^\|(.+)\|$/",$line,$out))
\r
1529 array_push($result, "</table>");
\r
1530 if(!$out[1] || $table != count(explode("|",$out[1])))
\r
1534 $comment_out = $comment_out[1];
\r
1536 if(preg_match("/^(\*{1,3})(.*)/",$line,$out))
\r
1538 $result = array_merge($result,$saved); $saved = array();
\r
1539 $str = inline($out[2]);
\r
1541 $level = strlen($out[1]) + 1;
\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
1547 else if(preg_match("/^(-{1,4})(.*)/",$line,$out))
\r
1549 if(strlen($out[1]) == 4)
\r
1551 $result = array_merge($result,$saved); $saved = array();
\r
1552 array_push($result, $hr);
\r
1556 back_push('ul', strlen($out[1]));
\r
1557 array_push($result, '<li>' . inline($out[2]) . '</li>');
\r
1560 else if (preg_match("/^:([^:]+):(.*)/",$line,$out))
\r
1562 back_push('dl', 1);
\r
1563 array_push($result, '<dt>' . inline($out[1]) . '</dt>', '<dd>' . inline($out[2]) . '</dd>');
\r
1565 else if(preg_match("/^(>{1,3})(.*)/",$line,$out))
\r
1567 back_push('blockquote', strlen($out[1]));
\r
1568 array_push($result, ltrim(inline($out[2])));
\r
1570 else if (preg_match("/^\s*$/",$line,$out))
\r
1572 $result = array_merge($result,$saved); $saved = array();
\r
1573 //array_unshift($saved, "</p>");
\r
1574 array_push($result, "<p>");
\r
1576 else if(preg_match("/^(\s+.*)/",$line,$out))
\r
1578 back_push('pre', 1);
\r
1579 array_push($result, htmlspecialchars($out[1],ENT_NOQUOTES));
\r
1581 else if(preg_match("/^\|(.+)\|$/",$line,$out))
\r
1583 $arytable = explode("|",$out[1]);
\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
1592 array_push($result,"<tr>");
\r
1593 foreach($arytable as $td)
\r
1595 array_push($result,"<td class=\"style_td\">");
\r
1596 array_push($result,ltrim(inline($td)));
\r
1597 array_push($result,"</td>");
\r
1599 array_push($result,"</tr>");
\r
1602 else if(strlen($comment_out) != 0)
\r
1604 array_push($result," <!-- ".htmlspecialchars($comment_out)." -->");
\r
1608 array_push($result, inline($line));
\r
1611 if($table) array_push($result, "</table>");
\r
1613 $result_last = $result = array_merge($result,$saved); $saved = array();
\r
1615 if($content_id != 0)
\r
1617 $result = array();
\r
1620 foreach($arycontents as $line)
\r
1622 if(preg_match("/^(-{1,3})(.*)/",$line,$out))
\r
1624 back_push('ul', strlen($out[1]));
\r
1625 array_push($result, '<li>'.$out[2].'</li>');
\r
1628 $result = array_merge($result,$saved); $saved = array();
\r
1630 $contents = "<a name=\"contents\"></a>\n";
\r
1631 $contents .= join("\n",$result);
\r
1632 if($strip_link_wall)
\r
1634 $contents = preg_replace("/\[\[([^\]]+)\]\]/","$1",$contents);
\r
1638 $result_last = inline2($result_last);
\r
1640 $result_last = preg_replace("/^#contents/",$contents,$result_last);
\r
1642 $str = join("\n", $result_last);
\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
1653 $longtaketime = getmicrotime() - $start_mtime;
\r
1655 $str = preg_replace("/&((lt;)|(gt;))/","&$1",$str);
\r
1660 // $tag¤Î¥¿¥°¤ò$level¥ì¥Ù¥ë¤Þ¤ÇµÍ¤á¤ë¡£
\r
1661 function back_push($tag, $level)
\r
1663 global $result,$saved;
\r
1665 while (count($saved) > $level) {
\r
1666 array_push($result, array_shift($saved));
\r
1668 if ($saved[0] != "</$tag>") {
\r
1669 $result = array_merge($result,$saved); $saved = array();
\r
1671 while (count($saved) < $level) {
\r
1672 array_unshift($saved, "</$tag>");
\r
1673 array_push($result, "<$tag>");
\r
1677 // ¥ê¥ó¥¯¤ÎÉղ佤ξ
\r
1678 function inline($line)
\r
1680 $line = htmlspecialchars($line);
\r
1682 $line = preg_replace("/(
\r
1684 (\(\(([^\(\)]+)\)\))
\r
1688 )/ex","make_note(\"$1\")",$line);
\r
1693 // ¥ê¥ó¥¯¤ÎÉղ佤ξ2
\r
1694 function inline2($str)
\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
1701 for($cnt=0;$cnt<count($str);$cnt++)
\r
1703 if(preg_match("/^(\s)/",$str[$cnt]))
\r
1705 $arykeep[$cnt] = $str[$cnt];
\r
1707 $cnts_plain[] = $cnt;
\r
1709 else if(preg_match("/^\#([^\(]+)\(?(.*)\)?$/",$str[$cnt],$match))
\r
1711 if(file_exists(PLUGIN_DIR.$match[1].".inc.php"))
\r
1713 require_once(PLUGIN_DIR.$match[1].".inc.php");
\r
1714 if(function_exists("plugin_".$match[1]."_convert"))
\r
1716 $aryplugins[$cnt] = $str[$cnt];
\r
1718 $cnts_plugin[] = $cnt;
\r
1724 $str = preg_replace("/'''([^']+?)'''/s","<i>$1</i>",$str); // Italic
\r
1726 $str = preg_replace("/''([^']+?)''/s","<b>$1</b>",$str); // Bold
\r
1728 $str = preg_replace("/
\r
1730 (\[\[([^\]]+)\:(https?|ftp|news)(:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\]\])
\r
1732 (\[(https?|ftp|news)(:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\s([^\]]+)\])
\r
1734 (https?|ftp|news)(:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)
\r
1736 ([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)
\r
1738 (\[\[([^\]]+)\:([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)\]\])
\r
1745 )/ex","make_link('$1')",$str);
\r
1747 $str = preg_replace("/#related/",make_related($vars["page"],true),$str);
\r
1749 $str = make_user_rules($str);
\r
1751 $aryplugins = preg_replace("/^\#([^\(]+)$/ex","plugin_convert('$1','$2')",$aryplugins);
\r
1752 $aryplugins = preg_replace("/^\#([^\(]+)\((.*)\)$/ex","plugin_convert('$1','$2')",$aryplugins);
\r
1755 $str = preg_replace("/^#norelated$/","",$str);
\r
1757 $related_link = 0;
\r
1759 foreach($cnts_plain as $cnt)
\r
1760 $str[$cnt] = $arykeep[$cnt];
\r
1762 foreach($cnts_plugin as $cnt)
\r
1763 $str[$cnt] = $aryplugins[$cnt];
\r
1769 function plugin_convert($plugin_name,$plugin_args)
\r
1771 $invalid_return = "#${plugin_name}(${plugin_args})";
\r
1773 if($plugin_args !== "")
\r
1774 $aryargs = explode(",",$plugin_args);
\r
1776 $aryargs = array();
\r
1777 $retvar = call_user_func_array("plugin_${plugin_name}_convert",$aryargs);
\r
1779 if($retvar === FALSE) return $invalid_return;
\r
1780 else return $retvar;
\r
1784 function make_related($page,$_isrule)
\r
1786 global $related_str,$rule_related_str,$related,$_make_related,$vars;
\r
1788 $page_name = strip_bracket($vars["page"]);
\r
1790 if(!is_array($_make_related))
\r
1792 $aryrelated = do_search($page,"OR",1);
\r
1794 if(is_array($aryrelated))
\r
1796 foreach($aryrelated as $key => $val)
\r
1798 $new_arylerated[$key.md5($val)] = $val;
\r
1802 if(is_array($related))
\r
1804 foreach($related as $key => $val)
\r
1806 $new_arylerated[$key.md5($val)] = $val;
\r
1810 @krsort($new_arylerated);
\r
1811 $_make_related = @array_unique($new_arylerated);
\r
1816 if(is_array($_make_related))
\r
1818 foreach($_make_related as $str)
\r
1820 preg_match("/<a\shref=\"([^\"]+)\">([^<]+)<\/a>(.*)/",$str,$out);
\r
1822 if($out[3]) $title = " title=\"$out[2] $out[3]\"";
\r
1824 $aryret[$out[2]] = "<a href=\"$out[1]\"$title>$out[2]</a>";
\r
1831 $aryret = $_make_related;
\r
1834 if($_isrule) $str = $rule_related_str;
\r
1835 else $str = $related_str;
\r
1837 return @join($str,$aryret);
\r
1841 function make_note($str)
\r
1843 global $note_id,$foot_explain;
\r
1845 $str = preg_replace("/^\(\(/","",$str);
\r
1846 $str = preg_replace("/\)\)$/","",$str);
\r
1848 $str= str_replace("\\'","'",$str);
\r
1850 $str = make_user_rules($str);
\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
1859 // ¥ê¥ó¥¯¤òÉղ乤ë
\r
1860 function make_link($name)
\r
1862 global $BracketName,$WikiName,$InterWikiName,$script,$link_target,$interwiki_target;
\r
1863 global $related,$show_passage,$vars,$defaultpage;
\r
1865 $aryconv_htmlspecial = array("&","<",">");
\r
1866 $aryconv_html = array("&","<",">");
\r
1870 if(preg_match("/^\[\[([^\]]+)\:((https?|ftp|news)([^\]]+))\]\]$/",$name,$match))
\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
1875 else if(preg_match("/^\[((https?|ftp|news)([^\]\s]+))\s([^\]]+)\]$/",$name,$match))
\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
1880 else if(preg_match("/^(https?|ftp|news).*?(\.gif|\.png|\.jpeg|\.jpg)?$/",$name,$match))
\r
1882 $name = str_replace($aryconv_htmlspecial,$aryconv_html,$name);
\r
1884 return "<a href=\"$name\" target=\"$link_target\"><img src=\"$name\" border=\"0\"></a>";
\r
1886 return "<a href=\"$name\" target=\"$link_target\">$page</a>";
\r
1888 else if(preg_match("/^\[\[([^\]]+)\:([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)\]\]/",$name,$match))
\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
1893 return "<a href=\"mailto:$match[2]\">$match[1]</a>";
\r
1895 else if(preg_match("/^([[:alnum:]\-_]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)/",$name))
\r
1897 $name = str_replace($aryconv_htmlspecial,$aryconv_html,$name);
\r
1898 return "<a href=\"mailto:$name\">$page</a>";
\r
1900 else if(preg_match("/^($InterWikiName)$/",str_replace($aryconv_htmlspecial,$aryconv_html,$name)))
\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
1906 return "<a href=\"$script?$percent_name\" target=\"$interwiki_target\">$page</a>";
\r
1908 else if(preg_match("/^($BracketName)|($WikiName)$/",str_replace($aryconv_htmlspecial,$aryconv_html,$name)))
\r
1910 if(preg_match("/^([^>]+)>([^>]+)$/",strip_bracket(str_replace($aryconv_htmlspecial,$aryconv_html,$name)),$match))
\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
1920 if(preg_match("/^\[\[\.\/([^\]]*)\]\]/",str_replace($aryconv_htmlspecial,$aryconv_html,$name),$match))
\r
1923 $name = $vars["page"];
\r
1925 $name = "[[".strip_bracket($vars[page])."/$match[1]]]";
\r
1927 else if(preg_match("/^\[\[\..\/([^\]]+)\]\]/",str_replace($aryconv_htmlspecial,$aryconv_html,$name),$match))
\r
1929 for($i=0;$i<substr_count($name,"../");$i++)
\r
1930 $name = preg_replace("/(.+)\/([^\/]+)$/","$1",strip_bracket($vars["page"]));
\r
1932 if(!preg_match("/^($BracketName)|($WikiName)$/",$name))
\r
1933 $name = "[[$name]]";
\r
1935 if($vars["page"]==$name)
\r
1936 $name = "[[$match[1]]]";
\r
1938 $name = "[[".strip_bracket($name)."/$match[1]]]";
\r
1940 else if($name == "[[../]]")
\r
1942 $name = preg_replace("/(.+)\/([^\/]+)$/","$1",strip_bracket($vars["page"]));
\r
1944 if(!preg_match("/^($BracketName)|($WikiName)$/",$name))
\r
1945 $name = "[[$name]]";
\r
1946 if($vars["page"]==$name)
\r
1947 $name = $defaultpage;
\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
1955 $refer = rawurlencode($vars["page"]);
\r
1956 if(is_page($name))
\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
1964 $str_title = "title=\"$pagename $str\"";
\r
1966 return "<a href=\"$script?$percent_name\" $str_title>$page</a>";
\r
1969 return "<span class=\"noexists\">$page<a href=\"$script?cmd=edit&page=$percent_name&refer=$refer\">?</a></span>";
\r
1977 // ¥æ¡¼¥¶ÄêµÁ¥ë¡¼¥ë(¥½¡¼¥¹¤òÃÖ´¹¤¹¤ë)
\r
1978 function user_rules_str($str)
\r
1980 global $str_rules;
\r
1982 $arystr = split("\n",$str);
\r
1984 // ÆüÉÕ¡¦»þ¹ïÃÖ´¹½èÍý
\r
1985 foreach($arystr as $str)
\r
1987 if(substr($str,0,1) != " ")
\r
1989 foreach($str_rules as $rule => $replace)
\r
1991 $str = preg_replace("/$rule/",$replace,$str);
\r
1994 $retvars[] = $str;
\r
1997 return join("\n",$retvars);
\r
2000 // ¥æ¡¼¥¶ÄêµÁ¥ë¡¼¥ë(¥½¡¼¥¹¤ÏÃÖ´¹¤»¤º¥³¥ó¥Ð¡¼¥È)
\r
2001 function make_user_rules($str)
\r
2003 global $user_rules;
\r
2005 foreach($user_rules as $rule => $replace)
\r
2007 $str = preg_replace("/$rule/",$replace,$str);
\r
2013 // InterWikiName List ¤Î²ò¼á(ÊÖÃÍ:£²¼¡¸µÇÛÎó)
\r
2014 function open_interwikiname_list()
\r
2016 global $interwiki;
\r
2018 $retval = array();
\r
2019 $aryinterwikiname = file(get_filename(encode($interwiki)));
\r
2022 foreach($aryinterwikiname as $line)
\r
2024 if(preg_match("/\[((https?|ftp|news)(\:\/\/[[:alnum:]\+\$\;\?\.%,!#~\*\/\:@&=_\-]+))\s([^\]]+)\]\s?([^\s]*)/",$line,$match))
\r
2026 $retval[$match[4]]["url"] = $match[1];
\r
2027 $retval[$match[4]]["opt"] = $match[5];
\r
2034 // zlib´Ø¿ô¤¬»ÈÍѤǤ¤ì¤Ð¡¢°µ½Ì¤·¤Æ»ÈÍѤ¹¤ë¤¿¤á¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à´Ø¿ô
\r
2035 function backup_fopen($filename,$mode)
\r
2037 if(function_exists(gzopen))
\r
2038 return gzopen(str_replace(".txt",".gz",$filename),$mode);
\r
2040 return fopen($filename,$mode);
\r
2042 function backup_fputs($zp,$str)
\r
2044 if(function_exists(gzputs))
\r
2045 return gzputs($zp,$str);
\r
2047 return fputs($zp,$str);
\r
2049 function backup_fclose($zp)
\r
2051 if(function_exists(gzclose))
\r
2052 return gzclose($zp);
\r
2054 return fclose($zp);
\r
2056 function backup_file($filename)
\r
2058 if(function_exists(gzfile))
\r
2059 return @gzfile(str_replace(".txt",".gz",$filename));
\r
2061 return @file($filename);
\r
2063 function backup_delete($filename)
\r
2065 if(function_exists(gzopen))
\r
2066 return @unlink(str_replace(".txt",".gz",$filename));
\r
2068 return @unlink($filename);
\r
2071 // ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¡¼¥¿¤òºîÀ®¤¹¤ë
\r
2072 function make_backup($filename,$body,$oldtime)
\r
2074 global $splitter,$cycle,$maxage;
\r
2075 $aryages = array();
\r
2076 $arystrout = array();
\r
2078 if(function_exists(gzfile))
\r
2079 $filename = str_replace(".txt",".gz",$filename);
\r
2081 $realfilename = BACKUP_DIR.$filename;
\r
2083 if(time() - @filemtime($realfilename) > (60 * 60 * $cycle))
\r
2085 $aryages = read_backup($filename);
\r
2086 if(count($aryages) >= $maxage)
\r
2088 array_shift($aryages);
\r
2091 foreach($aryages as $lines)
\r
2093 foreach($lines as $key => $line)
\r
2095 if($key && $key == "timestamp")
\r
2097 $arystrout[] = "$splitter " . rtrim($line);
\r
2101 $arystrout[] = rtrim($line);
\r
2106 $strout = join("\n",$arystrout);
\r
2107 if(!preg_match("/\n$/",$strout) && trim($strout)) $strout .= "\n";
\r
2109 $body = "$splitter " . $oldtime . "\n" . $body;
\r
2110 if(!preg_match("/\n$/",$body)) $body .= "\n";
\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
2121 // ÆÃÄê¤ÎÀ¤Âå¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¡¼¥¿¤ò¼èÆÀ
\r
2122 function get_backup($age,$filename)
\r
2124 $aryages = read_backup($filename);
\r
2126 foreach($aryages as $key => $lines)
\r
2128 if($key != $age) continue;
\r
2129 foreach($lines as $key => $line)
\r
2131 if($key && $key == "timestamp") continue;
\r
2132 $retvars[] = $line;
\r
2139 // ¥Ð¥Ã¥¯¥¢¥Ã¥×¾ðÊó¤òÊÖ¤¹
\r
2140 function get_backup_info($filename)
\r
2144 $retvars = array();
\r
2145 $lines = backup_file(BACKUP_DIR.$filename);
\r
2147 if(!is_array($lines)) return array();
\r
2150 foreach($lines as $line)
\r
2152 preg_match("/^$splitter\s(\d+)$/",trim($line),$match);
\r
2156 $retvars[$age] = $match[1];
\r
2163 // ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¡¼¥¿Á´ÂΤò¼èÆÀ
\r
2164 function read_backup($filename)
\r
2168 $lines = backup_file(BACKUP_DIR.$filename);
\r
2170 if(!is_array($lines)) return array();
\r
2173 foreach($lines as $line)
\r
2175 preg_match("/^$splitter\s(\d+)$/",trim($line),$match);
\r
2179 $retvars[$age]["timestamp"] = $match[1] . "\n";
\r
2183 $retvars[$age][] = $line;
\r
2190 // [[ ]] ¤ò¼è¤ê½ü¤¯
\r
2191 function strip_bracket($str)
\r
2193 global $strip_link_wall;
\r
2195 if($strip_link_wall)
\r
2197 preg_match("/^\[\[(.*)\]\]$/",$str,$match);
\r
2204 // HTML¥¿¥°¤ò¼è¤ê½ü¤¯
\r
2205 function strip_htmltag($str)
\r
2207 //$str = preg_replace("/<a[^>]+>\?<\/a>/","",$str);
\r
2208 return preg_replace("/<[^>]+>/","",$str);
\r
2211 // ¥Æ¥¥¹¥ÈÀ°·Á¥ë¡¼¥ë¤òɽ¼¨¤¹¤ë
\r
2212 function catrule()
\r
2214 global $rule_body;
\r
2215 return $rule_body;
\r
2218 // ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë
\r
2219 function die_message($msg)
\r
2221 $title = $page = "Runtime error";
\r
2223 $body = "<h3>Runtime error</h3>\n";
\r
2224 $body .= "<b>Error message : $msg</b>\n";
\r
2226 catbody($title,$page,$body);
\r
2231 // »ØÄꤵ¤ì¤¿¥Ú¡¼¥¸¤Î·Ð²á»þ¹ï
\r
2232 function get_pg_passage($page,$sw=true)
\r
2234 global $_pg_passage,$show_passage;
\r
2236 if(!$show_passage) return "";
\r
2238 if(isset($_pg_passage[$page]))
\r
2241 return $_pg_passage[$page]["str"];
\r
2243 return $_pg_passage[$page]["label"];
\r
2245 if($pgdt = @filemtime(get_filename(encode($page))))
\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
2253 $_pg_passage[$page]["label"] = "(".ceil($pgdt / 60 / 60 / 24)."d)";
\r
2255 $_pg_passage[$page]["str"] = "<small>".$_pg_passage[$page]["label"]."</small>";
\r
2259 $_pg_passage[$page]["label"] = "";
\r
2260 $_pg_passage[$page]["str"] = "";
\r
2264 return $_pg_passage[$page]["str"];
\r
2266 return $_pg_passage[$page]["label"];
\r
2269 // ¸½ºß»þ¹ï¤ò¥Þ¥¤¥¯¥íÉäǼèÆÀ
\r
2270 function getmicrotime()
\r
2272 list($usec, $sec) = explode(" ",microtime());
\r
2273 return ((float)$sec + (float)$usec);
\r
2276 // ¥Ú¡¼¥¸Ì¾¤«¤é¥Ú¡¼¥¸Ì¾¤ò¸¡º÷¤¹¤ë¥ê¥ó¥¯¤òºîÀ®
\r
2277 function make_search($page)
\r
2279 global $script,$WikiName;
\r
2281 $page = htmlspecialchars($page);
\r
2282 $name = strip_bracket($page);
\r
2283 $url = rawurlencode($page);
\r
2285 //WikiWikiWeb like...
\r
2286 //if(preg_match("/^$WikiName$/",$page))
\r
2287 // $name = preg_replace("/([A-Z][a-z]+)/","$1 ",$name);
\r
2289 return "<a href=\"$script?cmd=search&word=$url\">$name</a> ";
\r
2292 // Last-Modified ¥Ø¥Ã¥À
\r
2293 function header_lastmod($page)
\r
2297 if($lastmod && is_page($page))
\r
2299 header("Last-Modified: ".gmdate("D, d M Y H:i:s", filemtime(get_filename(encode($page))))." GMT");
\r
2303 // RecentChanges ¤Î RSS ¤ò½ÐÎÏ
\r
2304 function catrss($rss)
\r
2306 global $rss_max,$page_title,$WikiName,$BracketName,$script,$whatsnew;
\r
2308 $lines = file(get_filename(encode($whatsnew)));
\r
2309 header("Content-type: application/xml");
\r
2314 foreach($lines as $line)
\r
2316 if($cnt > $rss_max - 1) break;
\r
2318 if(preg_match("/(($WikiName)|($BracketName))/",$line,$match))
\r
2322 $title = $url = $match[1];
\r
2326 if(function_exists("mb_convert_encoding"))
\r
2327 $title = mb_convert_encoding(strip_bracket($match[1]),"UTF-8","auto");
\r
2329 $title = strip_bracket($match[1]);
\r
2334 $desc = date("D, d M Y H:i:s T",filemtime(get_filename(encode($match[1]))));
\r
2337 $items.= "<item rdf:about=\"http://".SERVER_NAME.PHP_SELF."?".rawurlencode($url)."\">\n";
\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
2354 <?='<?xml version="1.0" encoding="UTF-8"?>'?>
\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
2360 <rss version="0.91">
\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
2376 <?='<?xml version="1.0" encoding="utf-8"?>'?>
\r
2380 xmlns="http://purl.org/rss/1.0/"
\r
2381 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
\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