/////////////////////////////////////////////////
// PukiWiki - Yet another WikiWikiWeb clone.
//
-// $Id: links.inc.php,v 1.10 2003/02/28 14:41:16 panda Exp $
+// $Id: links.inc.php,v 1.11 2003/03/10 11:30:25 panda Exp $
//
function plugin_links_action()
{
- global $vars;
+ global $vars,$adminpass,$whatsnew;
set_time_limit(0);
- if (!defined('LINK_DB')) {
- if ($vars['page'] != '') {
- links_update_file($vars['page']);
- return;
- }
- return links_init_file();
- }
- else {
- if ($vars['page'] != '') {
- links_update_db($vars['page']);
- return;
- }
- return links_init_db();
+ if ($vars['page'] != '' and $vars['page'] != $whatsnew)
+ {
+ plugin_links_updatedata($vars['page']);
+ return;
}
-}
-function links_init_file()
-{
- global $get,$adminpass,$whatsnew;
-
- if (md5($get['adminpass']) != $adminpass) {
+ if (md5($vars['adminpass']) != $adminpass)
+ {
return array('msg'=>'update database',
'body'=>'<p>administrator password require.</p>');
}
+ return plugin_links_initdata();
+}
+
+function plugin_links_initdata()
+{
+ global $whatsnew;
- // ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î½é´ü²½
- foreach (get_existfiles(CACHE_DIR,'.ref') as $cache) {
- unlink($cache);
- }
- foreach (get_existfiles(CACHE_DIR,'.rel') as $cache) {
- unlink($cache);
- }
- $pages = get_existpages();
- $ref = array(); // »²¾È¸µ
- $obj = new InlineConverter(array('page','auto'));
- foreach ($pages as $page) {
- if ($page == $whatsnew) {
- continue;
- }
- $time = get_filetime($page);
- $rel = array(); // »²¾ÈÀè
- $links = $obj->get_objects(join('',get_source($page)),$page);
- foreach ($links as $_obj) {
- if (!isset($_obj->type) or $_obj->type != 'pagename') {
+ if (defined('LINK_DB'))
+ {
+ // ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î½é´ü²½
+ $pages = get_existpages();
+ db_exec('DELETE FROM page;');
+ db_exec('DELETE FROM link;');
+ foreach ($pages as $page)
+ {
+ if ($page == $whatsnew)
+ {
continue;
- }
- $_page = $_obj->name;
- if ($_page != $page) {
- $rel[$_page] = 1;
- $ref[$_page][$page] = $time;
+ }
+ $time = get_filetime($page);
+ $a_page = addslashes($page);
+ db_exec("INSERT INTO page (name,lastmod) VALUES ('$a_page',$time);");
+ }
+ $rows = db_query('SELECT id,name FROM page;');
+ $pages = array();
+ foreach ($rows as $row)
+ {
+ $pages[$row['name']] = $row['id'];
+ }
+
+ $obj = new InlineConverter(array('page','auto'));
+ foreach ($pages as $page=>$id)
+ {
+ $links = $obj->get_objects(join('',get_source($page)),$page);
+ foreach ($links as $_obj)
+ {
+ if ($_obj->type != 'pagename')
+ {
+ continue;
+ }
+ $_page = $_obj->name;
+ if (!array_key_exists($_page,$pages))
+ {
+ $a_page = addslashes($_page);
+ db_exec("INSERT INTO page (name) VALUES ('$a_page');");
+ $rows = db_query("SELECT id,name FROM page WHERE name='$a_page';");
+ $row = $rows[0];
+ $pages[$row['name']] = $row['id'];
+ }
+
+ $ref_id = $pages[$_page];
+ if ($ref_id and $ref_id != $id)
+ {
+ db_exec("INSERT INTO link (page_id,ref_id) VALUES ($id,$ref_id);");
+ }
}
}
- $fp = fopen(CACHE_DIR.encode($page).'.rel','w')
- or die_message('cannot write '.htmlspecialchars(CACHE_DIR.encode($page).'.rel'));
- fputs($fp,join("\t",array_keys($rel)));
- fclose($fp);
}
-
- foreach ($ref as $page=>$arr) {
- $fp = fopen(CACHE_DIR.encode($page).'.ref','w')
- or die_message('cannot write '.htmlspecialchars(CACHE_DIR.encode($page).'.ref'));
- foreach ($arr as $_page=>$time) {
- fputs($fp,"$_page\t$time\n");
+ else // if (!defined('LINK_DB'))
+ {
+ // ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î½é´ü²½
+ foreach (get_existfiles(CACHE_DIR,'.ref') as $cache)
+ {
+ unlink($cache);
+ }
+ foreach (get_existfiles(CACHE_DIR,'.rel') as $cache)
+ {
+ unlink($cache);
+ }
+ $pages = get_existpages();
+ $ref = array(); // »²¾È¸µ
+ $obj = new InlineConverter(array('page','auto'));
+ foreach ($pages as $page)
+ {
+ if ($page == $whatsnew)
+ {
+ continue;
+ }
+ $time = get_filetime($page);
+ $rel = array(); // »²¾ÈÀè
+ $links = $obj->get_objects(join('',get_source($page)),$page);
+ foreach ($links as $_obj)
+ {
+ if (!isset($_obj->type) or $_obj->type != 'pagename')
+ {
+ continue;
+ }
+ $_page = $_obj->name;
+ if ($_page != $page)
+ {
+ $rel[$_page] = 1;
+ $ref[$_page][$page] = $time;
+ }
+ }
+ if (count($rel))
+ {
+ $fp = fopen(CACHE_DIR.encode($page).'.rel','w')
+ or die_message('cannot write '.htmlspecialchars(CACHE_DIR.encode($page).'.rel'));
+ fputs($fp,join("\t",array_keys($rel)));
+ fclose($fp);
+ }
+ }
+
+ foreach ($ref as $page=>$arr)
+ {
+ if (count($arr) == 0)
+ {
+ continue;
+ }
+ $fp = fopen(CACHE_DIR.encode($page).'.ref','w')
+ or die_message('cannot write '.htmlspecialchars(CACHE_DIR.encode($page).'.ref'));
+ foreach ($arr as $_page=>$time)
+ {
+ fputs($fp,"$_page\t$time\n");
+ }
+ fclose($fp);
}
- fclose($fp);
}
return array('msg'=>'update database','body'=>'<p>done.</p>');
}
-function links_update_file($page)
+function plugin_links_updatedata($page)
{
global $whatsnew;
- $obj = new InlineConverter(array('page','auto'));
- $time = is_page($page) ? get_filetime($page) : 0;
-
- $rel_old = array();
- $rel_file = CACHE_DIR.encode($page).'.rel';
- if (file_exists($rel_file)) {
- $lines = file($rel_file);
- if (array_key_exists(0,$lines)) {
- $rel_old = explode("\t",rtrim($lines[0]));
+ if (defined('LINK_DB'))
+ {
+ $is_page = is_page($page);
+ $time = ($is_page) ? get_filetime($page) : 0;
+ $a_page = addslashes($page);
+
+ $rows = db_query("SELECT id FROM page WHERE name='$a_page';");
+ if (count($rows) == 0)
+ {
+ if (!$is_page)
+ {
+ return;
+ }
+ db_exec("INSERT INTO page (name,lastmod) VALUES ('$a_page',$time);");
+ $rows = db_query("SELECT id FROM page WHERE name='$a_page';");
+ $id = $rows[0]['id'];
}
- }
- $rel_new = array(); // »²¾ÈÀè
- $links = $obj->get_objects(join('',get_source($page)),$page);
- foreach ($links as $_obj) {
- if (!isset($_obj->type) or $_obj->type != 'pagename') {
- continue;
- }
- $_page = $_obj->name;
- if ($_page != $page) {
- $rel_new[$_page] = 1;
+ else // if (count($rows) > 0)
+ {
+ $id = $rows[0]['id'];
+ // $page¤¬»²¾È¤·¤Æ¤¤¤ë¥Ú¡¼¥¸¤ò½é´ü²½
+ db_exec("DELETE FROM link WHERE page_id=$id;");
+ if (!$is_page)
+ {
+ $_rows = db_query("SELECT * FROM link WHERE ref_id=$id;");
+ if (count($_rows) == 0)
+ {
+ // $page¤ò»²¾È¤·¤Æ¤¤¤ë¥Ú¡¼¥¸¤¬¤Ê¤¤¤Î¤Ç¡¢¤³¤Î¥ì¥³¡¼¥É¤òºï½ü
+ db_exec("DELETE FROM page WHERE id=$id;");
+ return;
+ }
+ }
+ // ¥Ú¡¼¥¸¤Î¹¹¿·»þ¹ï¤ò¥»¥Ã¥È
+ db_exec("UPDATE page SET lastmod=$time WHERE id=$id;");
}
- }
- $rel_new = array_keys($rel_new);
-
- $fp = fopen($rel_file,'w')
- or die_message('cannot write '.htmlspecialchars($rel_file));
- fputs($fp,join("\t",$rel_new));
- fclose($fp);
-
- $add = array_diff($rel_new,$rel_old);
- foreach ($add as $_page) {
- $ref_file = CACHE_DIR.encode($_page).'.ref';
- $ref = "$page\t$time\n";
- if (file_exists($ref_file)) {
- foreach (file($ref_file) as $line) {
- list($ref_page,$time) = explode("\t",rtrim($line));
- if ($ref_page != $page) {
- $ref .= $line;
+
+ // cache
+ $pages = array();
+
+ $obj = new InlineConverter(array('page','auto'));
+ $links = $obj->get_objects(join('',get_source($page)),$page);
+ foreach ($links as $_obj)
+ {
+ if (!isset($_obj->type) or $_obj->type != 'pagename' or $_obj->name == $page)
+ {
+ continue;
+ }
+ $_page = $_obj->name;
+ if (!array_key_exists($_page,$pages))
+ {
+ $a_page = addslashes($_page);
+ $rows = db_query("SELECT id,name FROM page WHERE name='$a_page';");
+ if (count($rows) == 0)
+ {
+ db_exec("INSERT INTO page (name,lastmod) VALUES ('$a_page',0);");
+ $rows = db_query("SELECT id,name FROM page WHERE name='$a_page';");
}
+ $pages[$rows[0]['name']] = TRUE;
+ $ref_id =$rows[0]['id'];
+ db_exec("INSERT INTO link (page_id,ref_id) VALUES ($id,$ref_id);");
}
}
- $fp = fopen($ref_file,'w')
- or die_message('cannot write '.htmlspecialchars($ref_file));
- fputs($fp,$ref);
- fclose($fp);
+ // 狼¤é¤â»²¾È¤µ¤ì¤Ê¤¯¤Ê¤Ã¤¿¡Ö¸ºß¤·¤Ê¤¤¥Ú¡¼¥¸¡×¤ò¾Ãµî
+ // MySQL3¤Ï¡ÖÉûÌ䤤¹ç¤ï¤»¡×¤Ë̤Âбþ¡Ä?
+// db_exec("DELETE FROM page WHERE id in (SELECT id FROM page LEFT JOIN link ON id=ref_id WHERE lastmod=0 AND page_id IS NULL);");
+ $rows = db_query("SELECT id FROM page LEFT JOIN link ON id=ref_id WHERE lastmod=0 AND page_id IS NULL;");
+ $_arr = array();
+ foreach ($rows as $row)
+ {
+ $_arr[] = $row['id'];
+ }
+ if (count($_arr))
+ {
+ db_exec("DELETE FROM page WHERE id in (".join(',',$_arr).");");
+ }
}
- $del = array_diff($rel_old,$rel_new);
- foreach ($del as $_page) {
- $ref_file = CACHE_DIR.encode($_page).'.ref';
- if (file_exists($ref_file)) {
- $ref = '';
- foreach (file($ref_file) as $line) {
- list($ref_page,$time) = explode("\t",rtrim($line));
- if ($ref_page != $page) {
- $ref .= $line;
+ else // if (!defined('LINK_DB'))
+ {
+ $obj = new InlineConverter(array('page','auto'));
+ $time = is_page($page) ? get_filetime($page) : 0;
+
+ $rel_old = array();
+ $rel_file = CACHE_DIR.encode($page).'.rel';
+ if (file_exists($rel_file))
+ {
+ $lines = file($rel_file);
+ if (array_key_exists(0,$lines))
+ {
+ $rel_old = explode("\t",rtrim($lines[0]));
+ }
+ unlink($rel_file);
+ }
+ $rel_new = array(); // »²¾ÈÀè
+ $links = $obj->get_objects(join('',get_source($page)),$page);
+ foreach ($links as $_obj)
+ {
+ if (!isset($_obj->type) or $_obj->type != 'pagename')
+ {
+ continue;
+ }
+ $_page = $_obj->name;
+ if ($_page != $page)
+ {
+ $rel_new[$_page] = 1;
+ }
+ }
+
+ // .rel:$page¤¬»²¾È¤·¤Æ¤¤¤ë¥Ú¡¼¥¸¤Î°ìÍ÷
+ if (count($rel_new))
+ {
+ $rel_new = array_keys($rel_new);
+ $fp = fopen($rel_file,'w')
+ or die_message('cannot write '.htmlspecialchars($rel_file));
+ fputs($fp,join("\t",$rel_new));
+ fclose($fp);
+ }
+
+ // .ref:$_page¤ò»²¾È¤·¤Æ¤¤¤ë¥Ú¡¼¥¸¤Î°ìÍ÷
+ $add = array_diff($rel_new,$rel_old);
+ foreach ($add as $_page)
+ {
+ $ref_file = CACHE_DIR.encode($_page).'.ref';
+ $ref = "$page\t$time\n";
+ if (file_exists($ref_file))
+ {
+ foreach (file($ref_file) as $line)
+ {
+ list($ref_page,$time) = explode("\t",rtrim($line));
+ if ($ref_page != $page)
+ {
+ $ref .= $line;
+ }
}
}
$fp = fopen($ref_file,'w')
- or die_message('cannot write '.htmlspecialchars($ref_file));
+ or die_message('cannot write '.htmlspecialchars($ref_file));
fputs($fp,$ref);
fclose($fp);
}
- }
-}
-function links_init_db()
-{
- global $get,$adminpass,$whatsnew;
-
- if (md5($get['adminpass']) != $adminpass) {
- return array('msg'=>'update database',
- 'body'=>'<p>administrator password require.</p>');
- }
- // ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î½é´ü²½
- $pages = get_existpages();
- db_exec('DELETE FROM page;');
- db_exec('DELETE FROM link;');
- foreach ($pages as $page) {
- if ($page == $whatsnew) {
- continue;
- }
- $time = get_filetime($page);
- $a_page = addslashes($page);
- db_exec("INSERT INTO page (name,lastmod) VALUES ('$a_page',$time);");
- }
- $rows = db_query('SELECT id,name FROM page;');
- $pages = array();
- foreach ($rows as $row) {
- $pages[$row['name']] = $row['id'];
- }
-
- $obj = new InlineConverter(array('page','auto'));
- foreach ($pages as $page=>$id) {
- $links = $obj->get_objects(join('',get_source($page)),$page);
- foreach ($links as $_obj) {
- if ($_obj->type == 'pagename') {
- $_page = $_obj->name;
- if (array_key_exists($_page,$pages)) {
- $ref_id = $pages[$_page];
- if ($ref_id and $ref_id != $id) {
- db_exec("INSERT INTO link (page_id,ref_id) VALUES ($id,$ref_id);");
+
+ $del = array_diff($rel_old,$rel_new);
+ foreach ($del as $_page)
+ {
+ $ref_file = CACHE_DIR.encode($_page).'.ref';
+ if (file_exists($ref_file))
+ {
+ $ref = '';
+ foreach (file($ref_file) as $line)
+ {
+ list($ref_page,$time) = explode("\t",rtrim($line));
+ if ($ref_page != $page)
+ {
+ $ref .= $line;
}
}
+ unlink($ref_file);
+ if ($ref != '')
+ {
+ $fp = fopen($ref_file,'w')
+ or die_message('cannot write '.htmlspecialchars($ref_file));
+ fputs($fp,$ref);
+ fclose($fp);
+ }
}
}
}
- return array('msg'=>'update database','body'=>'<p>done.</p>');
-}
-function links_update_db($page)
-{
- global $vars,$whatsnew;
-
- if ($page == $whatsnew) {
- return;
- }
-
- $is_page = is_page($page);
- $time = ($is_page) ? get_filetime($page) : 0;
- $a_page = addslashes($page);
-
- $rows = db_query("SELECT id FROM page WHERE name='$a_page';");
-
- if (count($rows) == 0) { // not exist
- db_exec("INSERT INTO page (name,lastmod) VALUES ('$a_page',$time);");
- }
- else {
- $id = $rows[0]['id'];
- db_exec("DELETE FROM link WHERE page_id=$id;");
- if ($is_page) {
- db_exec("UPDATE page SET lastmod=$time WHERE id=$id;");
- }
- else {
- db_exec("DELETE FROM page WHERE id=$id;");
- db_exec("DELETE FROM link WHERE ref_id=$id;");
- return;
- }
- }
-
- $rows = db_query("SELECT id,name FROM page;");
- $pages = array();
- foreach ($rows as $row) {
- $pages[$row['name']] = $row['id'];
- }
-
- $id = $pages[$page];
-
- $obj = new InlineConverter(array('page','auto'));
- $links = $obj->get_objects(join('',get_source($page)),$page);
- foreach ($links as $_obj) {
- if (!isset($_obj->type) or $_obj->type != 'pagename') {
- continue;
- }
- $_page = $_obj->name;
- if (!array_key_exists($_page,$pages)) {
- continue;
- }
- $ref_id = $pages[$_page];
- if ($ref_id and $ref_id != $id) {
- db_exec("INSERT INTO link (page_id,ref_id) VALUES ($id,$ref_id);");
- }
- }
}
?>