2 /////////////////////////////////////////////////
3 // PukiWiki - Yet another WikiWikiWeb clone.
5 // $Id: file.php,v 1.4 2003/01/27 05:38:41 panda Exp $
9 function get_source($page)
11 return is_page($page) ?
12 crlf_rtrim(file(get_filename($page))) : array();
15 // ¥Ú¡¼¥¸¤Î¹¹¿·»þ¹ï¤òÆÀ¤ë
16 function get_filetime($page)
18 return filemtime(get_filename($page)) - LOCALZONE;
21 // ¥Ú¡¼¥¸¤Î¥Õ¥¡¥¤¥ë̾¤òÆÀ¤ë
22 function get_filename($page)
24 return DATA_DIR.encode($page).'.txt';
28 function page_write($page,$postdata)
30 $postdata = user_rules_str($postdata);
33 $oldpostdata = is_page($page) ? join('',get_source($page)) : "\n";
34 $diffdata = do_diff($oldpostdata,$postdata);
35 file_write(DIFF_DIR,$page,$diffdata);
38 make_backup($page,$postdata == '');
41 file_write(DATA_DIR,$page,$postdata);
43 // is_page¤Î¥¥ã¥Ã¥·¥å¤ò¥¯¥ê¥¢¤¹¤ë¡£
46 // link¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò¹¹¿·
51 function file_write($dir,$page,$str)
53 global $post,$update_exec;
55 $page = strip_bracket($page);
57 $file = $dir.encode($page).'.txt';
59 if ($dir == DATA_DIR and $str == '' and file_exists($file)) {
63 $str = preg_replace("/\r/",'',$str);
64 $str = rtrim($str)."\n";
66 if (!empty($post['notimestamp']) and file_exists($file)) {
67 $timestamp = filemtime($file) - LOCALZONE;
70 $fp = fopen($file,'w')
71 or die_message('cannot write page file or diff file or other'.htmlspecialchars($page).'<br>maybe permission is not writable or filename is too long');
77 touch($file,$timestamp + LOCALZONE);
85 if ($update_exec and $dir == DATA_DIR) {
86 system($update_exec.' > /dev/null &');
90 // ºÇ½ª¹¹¿·¥Ú¡¼¥¸¤Î¹¹¿·
91 function put_lastmodified()
93 global $script,$post,$maxshow,$whatsnew,$non_list;
96 foreach(get_existpages() as $page) {
97 if ($page == $whatsnew or preg_match("/$non_list/",$page)) {
101 $time = get_filetime($page);
102 $s_page = htmlspecialchars($page);
103 $pages[$s_page] = $time;
106 arsort($pages); //»þ¹ï¹ß½ç¤Ç¥½¡¼¥È
108 $fp = fopen(get_filename($whatsnew),'w')
109 or die_message('cannot write page file '.htmlspecialchars($whatsnew).'<br>maybe permission is not writable or filename is too long');
113 foreach($pages as $s_page => $time) {
114 fputs($fp, "//$time $s_page\n");
117 $pages = array_splice($pages,0,$maxshow);
119 foreach($pages as $s_page => $time) {
120 $lastmod = format_date($time);
121 fputs($fp, "-$lastmod - [[$s_page]]\n");
124 fputs($fp,"#norelated\n"); // :)
129 // »ØÄꤵ¤ì¤¿¥Ú¡¼¥¸¤Î·Ð²á»þ¹ï
130 function get_pg_passage($page,$sw=TRUE)
132 global $show_passage;
135 if (!$show_passage) {
139 if (!isset($pg_passage)) {
140 $pg_passage = array();
143 if (!array_key_exists($page,$pg_passage)) {
144 $pg_passage[$page] = (is_page($page) and $time = get_filetime($page)) ? get_passage($time) : '';
147 return $sw ? "<small>{$pg_passage[$page]}</small>" : $pg_passage[$page];
150 // Last-Modified ¥Ø¥Ã¥À
151 function header_lastmod()
155 if ($lastmod and is_page($page)) {
156 header('Last-Modified: '.date('D, d M Y H:i:s',get_filetime($page)).' GMT');
160 // Á´¥Ú¡¼¥¸Ì¾¤òÇÛÎó¤Ë
161 function get_existpages($dir = DATA_DIR)
165 $dir = @opendir($dir) or die();
167 while ($file = readdir($dir)) {
168 if (preg_match('/^([0-9A-F]+)/',$file,$matches)) {
169 $aryret[] = decode($matches[1]);
178 function links_update($page)
182 // link¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò¹¹¿·
183 if (defined('LINK_DB') and exist_plugin_action('links')) {
185 $tmp = $vars['page'];
186 $vars['page'] = $page;
187 do_plugin_action('links');
188 $vars['page'] = $tmp;
191 //¤¢¤ë¥Ú¡¼¥¸¤Î´ØÏ¢¥Ú¡¼¥¸¤òÆÀ¤ë
192 function links_get_related($page)
194 global $vars,$related;
197 if (!isset($links)) {
201 if (array_key_exists($page,$links)) {
202 return $links[$page];
205 // ²Äǽ¤Ê¤émake_link()¤ÇÀ¸À®¤·¤¿´ØÏ¢¥Ú¡¼¥¸¤ò¼è¤ê¹þ¤à
206 $links[$page] = ($page == $vars['page']) ? $related : array();
208 $a_page = addslashes($page);
210 if (defined('LINK_DB')) {
212 SELECT refpage.name,refpage.lastmod FROM page left join link on page.id = page_id left join page as refpage on ref_id = refpage.id where page.name = '$a_page'
214 SELECT DISTINCT refpage.name,refpage.lastmod FROM page left join link on page.id = ref_id left join page as refpage on page_id = refpage.id where page.name = '$a_page';
216 $rows = db_query($sql);
218 foreach ($rows as $row) {
219 if (empty($row['name']) or substr($row['name'],0,1) == ':') {
222 $links[$page][$row['name']] = $row['lastmod'];
226 $links[$page] = array_merge($links[$page],do_search($page,'OR',1));
229 return $links[$page];