2 /////////////////////////////////////////////////
3 // PukiWiki - Yet another WikiWikiWeb clone.
5 // $Id: links.inc.php,v 1.9 2003/02/26 08:53:51 panda Exp $
8 function plugin_links_action()
14 if (!defined('LINK_DB')) {
15 if ($vars['page'] != '') {
16 links_update_file($vars['page']);
19 return links_init_file();
22 if ($vars['page'] != '') {
23 links_update_db($vars['page']);
26 return links_init_db();
29 function links_init_file()
31 global $get,$adminpass,$whatsnew;
33 if (md5($get['adminpass']) != $adminpass) {
34 return array('msg'=>'update database',
35 'body'=>'<p>administrator password require.</p>');
38 // ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î½é´ü²½
39 foreach (get_existfiles(CACHE_DIR,'.ref') as $cache) {
42 foreach (get_existfiles(CACHE_DIR,'.rel') as $cache) {
45 $pages = get_existpages();
46 $ref = array(); // »²¾È¸µ
47 $obj = new InlineConverter(array('page','auto'));
48 foreach ($pages as $page) {
49 if ($page == $whatsnew) {
52 $time = get_filetime($page);
53 $rel = array(); // »²¾ÈÀè
54 $links = $obj->get_objects(join('',get_source($page)),$page);
55 foreach ($links as $_obj) {
56 if (!isset($_obj->type) or $_obj->type != 'pagename') {
60 if ($_page != $page) {
62 $ref[$_page][$page] = $time;
65 $fp = fopen(CACHE_DIR.encode($page).'.rel','w')
66 or die_message('cannot write '.htmlspecialchars(CACHE_DIR.encode($page).'.rel'));
67 fputs($fp,join("\t",array_keys($rel)));
71 foreach ($ref as $page=>$arr) {
72 $fp = fopen(CACHE_DIR.encode($page).'.ref','w')
73 or die_message('cannot write '.htmlspecialchars(CACHE_DIR.encode($page).'.ref'));
74 foreach ($arr as $_page=>$time) {
75 fputs($fp,"$_page\t$time\n");
79 return array('msg'=>'update database','body'=>'<p>done.</p>');
81 function links_update_file($page)
85 $obj = new InlineConverter();
86 $time = is_page($page) ? get_filetime($page) : 0;
89 $rel_file = CACHE_DIR.encode($page).'.rel';
90 if (file_exists($rel_file)) {
91 $lines = file($rel_file);
92 if (array_key_exists(0,$lines)) {
93 $rel_old = explode("\t",rtrim($lines[0]));
96 $rel_new = array(); // »²¾ÈÀè
97 $links = $obj->get_objects(join('',get_source($page)),$page);
98 foreach ($links as $_obj) {
99 if (!isset($_obj->type) or $_obj->type != 'pagename') {
102 $_page = $_obj->name;
103 if ($_page != $page) {
104 $rel_new[$_page] = 1;
107 $rel_new = array_keys($rel_new);
109 $fp = fopen($rel_file,'w')
110 or die_message('cannot write '.htmlspecialchars($rel_file));
111 fputs($fp,join("\t",$rel_new));
114 $add = array_diff($rel_new,$rel_old);
115 foreach ($add as $_page) {
116 $ref_file = CACHE_DIR.encode($_page).'.ref';
117 $ref = "$page\t$time\n";
118 if (file_exists($ref_file)) {
119 foreach (file($ref_file) as $line) {
120 list($ref_page,$time) = explode("\t",rtrim($line));
121 if ($ref_page != $page) {
126 $fp = fopen($ref_file,'w')
127 or die_message('cannot write '.htmlspecialchars($ref_file));
131 $del = array_diff($rel_old,$rel_new);
132 foreach ($del as $_page) {
133 $ref_file = CACHE_DIR.encode($_page).'.ref';
134 if (file_exists($ref_file)) {
136 foreach (file($ref_file) as $line) {
137 list($ref_page,$time) = explode("\t",rtrim($line));
138 if ($ref_page != $page) {
142 $fp = fopen($ref_file,'w')
143 or die_message('cannot write '.htmlspecialchars($ref_file));
149 function links_init_db()
151 global $get,$adminpass,$whatsnew;
153 if (md5($get['adminpass']) != $adminpass) {
154 return array('msg'=>'update database',
155 'body'=>'<p>administrator password require.</p>');
157 // ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î½é´ü²½
158 $pages = get_existpages();
159 db_exec('DELETE FROM page;');
160 db_exec('DELETE FROM link;');
161 foreach ($pages as $page) {
162 if ($page == $whatsnew) {
165 $time = get_filetime($page);
166 $a_page = addslashes($page);
167 db_exec("INSERT INTO page (name,lastmod) VALUES ('$a_page',$time);");
169 $rows = db_query('SELECT id,name FROM page;');
171 foreach ($rows as $row) {
172 $pages[$row['name']] = $row['id'];
175 $obj = new InlineConverter();
176 foreach ($pages as $page=>$id) {
177 $links = $obj->get_objects(join('',get_source($page)),$page);
178 foreach ($links as $_obj) {
179 if ($_obj->type == 'pagename') {
180 $_page = $_obj->name;
181 if (array_key_exists($_page,$pages)) {
182 $ref_id = $pages[$_page];
183 if ($ref_id and $ref_id != $id) {
184 db_exec("INSERT INTO link (page_id,ref_id) VALUES ($id,$ref_id);");
190 return array('msg'=>'update database','body'=>'<p>done.</p>');
192 function links_update_db($page)
194 global $vars,$whatsnew;
196 if ($page == $whatsnew) {
200 $is_page = is_page($page);
201 $time = ($is_page) ? get_filetime($page) : 0;
202 $a_page = addslashes($page);
204 $rows = db_query("SELECT id FROM page WHERE name='$a_page';");
206 if (count($rows) == 0) { // not exist
207 db_exec("INSERT INTO page (name,lastmod) VALUES ('$a_page',$time);");
210 $id = $rows[0]['id'];
211 db_exec("DELETE FROM link WHERE page_id=$id;");
213 db_exec("UPDATE page SET lastmod=$time WHERE id=$id;");
216 db_exec("DELETE FROM page WHERE id=$id;");
217 db_exec("DELETE FROM link WHERE ref_id=$id;");
222 $rows = db_query("SELECT id,name FROM page;");
224 foreach ($rows as $row) {
225 $pages[$row['name']] = $row['id'];
230 $obj = new InlineConverter(array('page','auto'));
231 $links = $obj->get_objects(join('',get_source($page)),$page);
232 foreach ($links as $_obj) {
233 if (!isset($_obj->type) or $_obj->type != 'pagename') {
236 $_page = $_obj->name;
237 if (!array_key_exists($_page,$pages)) {
240 $ref_id = $pages[$_page];
241 if ($ref_id and $ref_id != $id) {
242 db_exec("INSERT INTO link (page_id,ref_id) VALUES ($id,$ref_id);");