2 // PukiWiki - Yet another WikiWikiWeb clone.
3 // $Id: file.php,v 1.3 2002/11/29 00:09:00 panda Exp $
4 /////////////////////////////////////////////////
7 function get_source($page)
9 if(page_exists($page)) {
10 return file(get_filename(encode($page)));
16 // ¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¤«¡©
17 function page_exists($page)
19 return file_exists(get_filename(encode($page)));
23 function file_write($dir,$page,$str)
25 global $post,$update_exec;
29 @unlink($dir.encode($page).".txt");
33 $str = preg_replace("/\x0D\x0A|\x0D|\x0A/","\n",$str);
35 if($post["notimestamp"] && is_page($page))
37 $timestamp = @filemtime($dir.encode($page).".txt");
39 $fp = fopen($dir.encode($page).".txt","w");
40 if($fp===FALSE) die_message("cannot write page file or diff file or other".htmlspecialchars($page)."<br>maybe permission is not writable or filename is too long");
41 while(!flock($fp,LOCK_EX));
46 touch($dir.encode($page).".txt",$timestamp);
52 if($update_exec and $dir == DATA_DIR)
54 system($update_exec." > /dev/null &");
58 // ºÇ½ª¹¹¿·¥Ú¡¼¥¸¤Î¹¹¿·
59 function put_lastmodified()
61 global $script,$maxshow,$whatsnew,$date_format,$time_format,$weeklabels,$post,$non_list;
63 if($post["notimestamp"]) return;
65 $files = get_existpages();
66 foreach($files as $page) {
67 if($page == $whatsnew) continue;
68 if(preg_match("/$non_list/",$page)) continue;
70 if(file_exists(get_filename(encode($page))))
72 $page_url = rawurlencode($page);
73 $lastmodtime = filemtime(get_filename(encode($page)));
74 $lastmod = date($date_format,$lastmodtime)
75 . " (" . $weeklabels[date("w",$lastmodtime)] . ") "
76 . date($time_format,$lastmodtime);
77 $putval[$lastmodtime][] = "-$lastmod - $page";
83 $fp = fopen(get_filename(encode($whatsnew)),"w");
84 if($fp===FALSE) die_message("cannot write page file ".htmlspecialchars($whatsnew)."<br>maybe permission is not writable or filename is too long");
86 foreach($putval as $pages)
88 foreach($pages as $page)
90 fputs($fp,$page."\n");
92 if($cnt > $maxshow) break;
94 if($cnt > $maxshow) break;
100 // ¥Õ¥¡¥¤¥ë̾¤òÆÀ¤ë(¥¨¥ó¥³¡¼¥É¤µ¤ì¤Æ¤¤¤ëɬÍ×ͤê)
101 function get_filename($pagename)
103 return DATA_DIR.$pagename.".txt";
106 // ¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¤«¤·¤Ê¤¤¤«
107 function is_page($page,$reload=false)
109 global $InterWikiName,$_ispage;
111 if(($_ispage[$page] === true || $_ispage[$page] === false) && !$reload) return $_ispage[$page];
113 if(preg_match("/($InterWikiName)/",$page))
114 $_ispage[$page] = false;
115 else if(!page_exists($page))
116 $_ispage[$page] = false;
118 $_ispage[$page] = true;
120 return $_ispage[$page];
123 // ¥Ú¡¼¥¸¤¬ÊÔ½¸²Äǽ¤«
124 function is_editable($page)
126 global $BracketName,$WikiName,$InterWikiName,$cantedit,$_editable;
128 if($_editable === true || $_editable === false) return $_editable;
130 if(preg_match("/^$InterWikiName$/",$page))
132 elseif(!preg_match("/^$BracketName$/",$page) && !preg_match("/^$WikiName$/",$page))
134 else if(in_array($page,$cantedit))
142 // ¥Ú¡¼¥¸¤¬Åà·ë¤µ¤ì¤Æ¤¤¤ë¤«
143 function is_freeze($page)
147 if(!is_page($page)) return false;
148 if($_freeze === true || $_freeze === false) return $_freeze;
150 $lines = get_source($page);
152 if($lines[0] == "#freeze\n")
160 // »ØÄꤵ¤ì¤¿¥Ú¡¼¥¸¤Î·Ð²á»þ¹ï
161 function get_pg_passage($page,$sw=true)
163 global $_pg_passage,$show_passage;
165 if(!$show_passage) return "";
167 if(isset($_pg_passage[$page]))
170 return $_pg_passage[$page]["str"];
172 return $_pg_passage[$page]["label"];
174 if($pgdt = @filemtime(get_filename(encode($page))))
176 $pgdt = UTIME - $pgdt;
177 if(ceil($pgdt / 60) < 60)
178 $_pg_passage[$page]["label"] = "(".ceil($pgdt / 60)."m)";
179 else if(ceil($pgdt / 60 / 60) < 24)
180 $_pg_passage[$page]["label"] = "(".ceil($pgdt / 60 / 60)."h)";
182 $_pg_passage[$page]["label"] = "(".ceil($pgdt / 60 / 60 / 24)."d)";
184 $_pg_passage[$page]["str"] = "<small>".$_pg_passage[$page]["label"]."</small>";
188 $_pg_passage[$page]["label"] = "";
189 $_pg_passage[$page]["str"] = "";
193 return $_pg_passage[$page]["str"];
195 return $_pg_passage[$page]["label"];
198 // Last-Modified ¥Ø¥Ã¥À
199 function header_lastmod($page)
203 if($lastmod && is_page($page))
205 header("Last-Modified: ".gmdate("D, d M Y H:i:s", filemtime(get_filename(encode($page))))." GMT");
209 // Á´¥Ú¡¼¥¸Ì¾¤òÇÛÎó¤Ë
210 function get_existpages()
214 if ($dir = @opendir(DATA_DIR))
216 while($file = readdir($dir))
218 if($file == ".." || $file == "." || strstr($file,".txt")===FALSE) continue;
219 $page = decode(trim(preg_replace("/\.txt$/"," ",$file)));
220 array_push($aryret,$page);