OSDN Git Service

database operation cleanup. (tested on MySQL3.23.55/Windows2000 and PostgreSQL7.2...
authorpanda <panda>
Mon, 10 Mar 2003 11:30:50 +0000 (20:30 +0900)
committerpanda <panda>
Mon, 10 Mar 2003 11:30:50 +0000 (20:30 +0900)
file.php
mysql.php
plugin/links.inc.php
plugin/yetlist.inc.php
pukiwiki.ini.php

index 55ad2dd..3918af3 100644 (file)
--- a/file.php
+++ b/file.php
@@ -2,7 +2,7 @@
 /////////////////////////////////////////////////
 // PukiWiki - Yet another WikiWikiWeb clone.
 //
-// $Id: file.php,v 1.13 2003/03/07 07:05:14 panda Exp $
+// $Id: file.php,v 1.14 2003/03/10 11:30:50 panda Exp $
 //
 
 // ¥½¡¼¥¹¤ò¼èÆÀ
@@ -264,45 +264,73 @@ function links_get_related($page)
        global $vars,$related;
        static $links;
        
-       if (!isset($links)) {
+       if (!isset($links))
+       {
                $links = array();
        }
        
-       if (array_key_exists($page,$links)) {
+       if (array_key_exists($page,$links))
+       {
                return $links[$page];
        }
        
        // ²Äǽ¤Ê¤émake_link()¤ÇÀ¸À®¤·¤¿´ØÏ¢¥Ú¡¼¥¸¤ò¼è¤ê¹þ¤à
        $links[$page] = ($page == $vars['page']) ? $related : array();
        
-       $a_page = addslashes($page);
+       // ¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤é´ØÏ¢¥Ú¡¼¥¸¤òÆÀ¤ë
+       $links[$page] += links_get_related_db($vars['page']);
        
-       if (defined('LINK_DB')) {
+       return $links[$page];
+}
+// ¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤é´ØÏ¢¥Ú¡¼¥¸¤òÆÀ¤ë
+function links_get_related_db($page)
+{
+       $links = array();
+       
+       if (defined('LINK_DB'))
+       {
+               $a_page = addslashes($page);
+               
+               // $page¤¬»²¾È¤·¤Æ¤¤¤ë¥Ú¡¼¥¸
                $sql = <<<EOD
-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'
-UNION
-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';
+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' and refpage.lastmod > 0;
 EOD;
                $rows = db_query($sql);
+               // $page¤ò»²¾È¤·¤Æ¤¤¤ë¥Ú¡¼¥¸
+               $sql = <<<EOD
+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';
+EOD;
+               $rows += db_query($sql);
                
-               foreach ($rows as $row) {
-                       if (empty($row['name']) or substr($row['name'],0,1) == ':') {
+               foreach ($rows as $row)
+               {
+                       if (empty($row['name']) or substr($row['name'],0,1) == ':')
+                       {
                                continue;
                        }
-                       $links[$page][$row['name']] = $row['lastmod'];
+                       $links[$row['name']] = $row['lastmod'];
                }
        }
-       else {
-//             $links[$page] = array_merge($links[$page],do_search($page,'OR',1));
+       else
+       {
                $ref_name = CACHE_DIR.encode($page).'.ref';
-               if (file_exists($ref_name)) {
-                       foreach (file($ref_name) as $line) {
+               if (file_exists($ref_name))
+               {
+                       foreach (file($ref_name) as $line)
+                       {
                                list($_page,$time) = explode("\t",rtrim($line));
-                               $links[$page][$_page] = $time;
+                               $links[$_page] = $time;
                        }
                }
        }
-       
-       return $links[$page];
+       return $links;
 }
 ?>
index e300208..d04e882 100644 (file)
--- a/mysql.php
+++ b/mysql.php
@@ -2,14 +2,14 @@
 /////////////////////////////////////////////////
 // PukiWiki - Yet another WikiWikiWeb clone.
 //
-// $Id: mysql.php,v 1.1 2003/01/27 05:44:11 panda Exp $
+// $Id: mysql.php,v 1.2 2003/03/10 11:30:50 panda Exp $
 //
 
 function db_exec($sql)
 {
-       $conn = mysql_pconnect()
+       $conn = mysql_pconnect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS)
                or die_message('cannot connect db.');
-       mysql_select_db('pukiwiki',$conn)
+       mysql_select_db(MYSQL_DB,$conn)
                or die_message('cannot select db.');
        $result = mysql_query($sql,$conn)
                or die_message("query '$sql' failure.\n".mysql_error($conn));
index ebb53dc..a1b1734 100644 (file)
 /////////////////////////////////////////////////
 // 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);");
-               }
-       }
 }
 ?>
index db76313..3fe7667 100644 (file)
@@ -2,7 +2,7 @@
 /////////////////////////////////////////////////
 // PukiWiki - Yet another WikiWikiWeb clone.
 //
-// $Id: yetlist.inc.php,v 1.12 2003/03/02 02:41:30 panda Exp $
+// $Id: yetlist.inc.php,v 1.13 2003/03/10 11:30:25 panda Exp $
 //
 
 function plugin_yetlist_init()
@@ -30,28 +30,50 @@ function plugin_yetlist_action()
        $ret['body'] = '';
        
        $refer = array();
-       foreach (get_existpages() as $page) {
-               $obj = new InlineConverter(array('page','auto'));
-               $source = join("\n",preg_replace('/^(\s|\/\/|#).*$/','',get_source($page)));
-               foreach ($obj->get_objects($source,$page) as $_obj) {
-                       if (($_obj->name != '') and ($_obj->type == 'pagename') and !is_page($_obj->name)) {
-                               $refer[$_obj->name][] = $page;
+       $exists = get_existpages();
+       if (defined('LINK_DB'))
+       {
+               $sql = <<<EOD
+SELECT DISTINCT page.name,refpage.name AS refer
+ FROM page
+  LEFT JOIN link ON page.id = ref_id
+   LEFT JOIN page AS refpage ON page_id = refpage.id
+    WHERE page.lastmod=0;
+EOD;
+               $rows = db_query($sql);
+               foreach ($rows as $row)
+               {
+                       $refer[$row['name']][] = $row['refer'];
+               }
+       }
+       else
+       {
+               $pages = array_diff(get_existpages(CACHE_DIR,'.ref'),get_existpages());
+               foreach ($pages as $page)
+               {
+                       foreach (file(CACHE_DIR.encode($page).'.ref') as $line)
+                       {
+                               list($_page,$lastmod) = explode("\t",$line);
+                               $refer[$page][] = $_page;
                        }
                }
        }
        
-       if (count($refer) == 0) {
+       if (count($refer) == 0)
+       {
                return $ret;
        }
        
        ksort($refer);
        
-       foreach($refer as $page=>$refs) {
+       foreach($refer as $page=>$refs)
+       {
                $r_page = rawurlencode($page);
                $s_page = htmlspecialchars($page);
                
                $link_refs = array();
-               foreach(array_unique($refs) as $_refer) {
+               foreach(array_unique($refs) as $_refer)
+               {
                        $r_refer = rawurlencode($_refer);
                        $s_refer = htmlspecialchars($_refer);
                        
@@ -62,7 +84,8 @@ function plugin_yetlist_action()
                $ret['body'] .= "<li><a href=\"$script?cmd=edit&amp;page=$r_page&amp;refer=$r_refer\">$s_page</a> <em>($link_ref)</em></li>\n";
        }
        
-       if ($ret['body'] != '') {
+       if ($ret['body'] != '')
+       {
                $ret['body'] = "<ul>\n{$ret['body']}</ul>\n";
        }
        
index 66fc40d..ec5f8a4 100644 (file)
@@ -2,7 +2,7 @@
 /////////////////////////////////////////////////
 // PukiWiki - Yet another WikiWikiWeb clone.
 //
-// $Id: pukiwiki.ini.php,v 1.31 2003/03/07 08:25:33 panda Exp $
+// $Id: pukiwiki.ini.php,v 1.32 2003/03/10 11:30:50 panda Exp $
 //
 // PukiWiki setting file
 
@@ -29,9 +29,13 @@ define('CACHE_DIR','./cache/');
 // ¥Õ¥¡¥¤¥ë¥Ù¡¼¥¹¤Î¤È¤­¤Ïdefine('LINK_DB',...)¤ò¥³¥á¥ó¥È¥¢¥¦¥È
 // MySQL
 //define('LINK_DB','mysql');
+//define('MYSQL_HOST','localhost');
+//define('MYSQL_USER','apache');
+//define('MYSQL_PASS','');
+//define('MYSQL_DB','pukiwiki');
 // PostgreSQL
 //define('LINK_DB','pgsql');
-//define('PG_CONNECT_STRING','dbname=pukiwiki host=gateway user=apache');
+//define('PG_CONNECT_STRING','dbname=pukiwiki host=localhost user=apache');
 
 /////////////////////////////////////////////////
 // ¥í¡¼¥«¥ë»þ´Ö