OSDN Git Service

Check defined or undefined
[pukiwiki/pukiwiki.git] / plugin / tb.inc.php
index 4c17c55..b6df66c 100644 (file)
 <?php
-// $Id: tb.inc.php,v 1.2 2003/07/27 13:54:58 arino Exp $
+// $Id: tb.inc.php,v 1.13 2004/07/31 13:41:20 henoheno Exp $
 /*
  * PukiWiki TrackBack ¥×¥í¥°¥é¥à
  * (C) 2003, Katsumi Saito <katsumi@jo1upk.ymt.prug.or.jp>
  * License: GPL
  *
- * plugin_tb_action()   action
- * tb_save()            TrackBack Ping ¥Ç¡¼¥¿Êݸ(¹¹¿·)
- * tb_xml_msg($rc,$msg) XML ·ë²Ì½ÐÎÏ
- * tb_mode_rss($tb_id)  ?__mode=rss ½èÍý
- * tb_mode_view($tb_id) ?__mode=view ½èÍý
+ * plugin_tb_action()    action
+ * tb_save()             TrackBack Ping ¥Ç¡¼¥¿Êݸ(¹¹¿·)
+ * tb_xml_msg($rc, $msg) XML ·ë²Ì½ÐÎÏ
+ * tb_mode_rss($tb_id)   ?__mode=rss ½èÍý
+ * tb_mode_view($tb_id)  ?__mode=view ½èÍý
  */
 
 function plugin_tb_action()
 {
-       global $script,$vars,$post,$trackback;
-       
+       global $vars, $trackback;
+
        // POST: TrackBack Ping ¤òÊݸ¤¹¤ë
-       if (!empty($post['url']))
-       {
+       if (!empty($vars['url']))
                tb_save();
-       }
-       
-       if ($trackback and !empty($vars['__mode']) and !empty($vars['tb_id']))
-       {
-               switch ($vars['__mode'])
-               {
-                       case 'rss':
-                               tb_mode_rss($vars['tb_id']);
-                               break;
-                       case 'view':
-                               tb_mode_view($vars['tb_id']);
-                               break;
+
+       if ($trackback and !empty($vars['__mode']) and !empty($vars['tb_id'])) {
+               switch ($vars['__mode']) {
+                       case 'rss':  tb_mode_rss($vars['tb_id']);  break;
+                       case 'view': tb_mode_view($vars['tb_id']); break;
                }
        }
-       return array('msg'=>'','body'=>'');
+       $pages = get_existpages(TRACKBACK_DIR, '.txt');
+
+       if (count($pages) == 0) {
+               return array('msg'=>'', 'body'=>'');
+       } else {
+               return array('msg'=>'trackback list', 'body'=>page_list($pages, 'read', FALSE));
+       }
 }
 
 // TrackBack Ping ¥Ç¡¼¥¿Êݸ(¹¹¿·)
 function tb_save()
 {
-       global $script,$post,$vars,$trackback;
-       static $fields = array(/* UTIME, */'url','title','excerpt','blog_name');
-       
+       global $script, $vars, $trackback;
+       static $fields = array( /* UTIME, */ 'url', 'title', 'excerpt', 'blog_name');
+
        // µö²Ä¤·¤Æ¤¤¤Ê¤¤¤Î¤Ë¸Æ¤Ð¤ì¤¿¾ì¹ç¤ÎÂбþ
-       if (!$trackback)
-       {
-               tb_xml_msg(1,'Feature inactive.');
+       if (!$trackback) {
+               tb_xml_msg(1, 'Feature inactive.');
        }
        // TrackBack Ping ¤Ë¤ª¤±¤ë URL ¥Ñ¥é¥á¡¼¥¿¤Ïɬ¿Ü¤Ç¤¢¤ë¡£
-       if (empty($post['url']))
-       {
-               tb_xml_msg(1,'It is an indispensable parameter. URL is not set up.');
+       if (empty($vars['url'])) {
+               tb_xml_msg(1, 'It is an indispensable parameter. URL is not set up.');
        }
        // Query String ¤òÆÀ¤ë
-       if (empty($vars['tb_id']))
-       {
-               tb_xml_msg(1,'TrackBack Ping URL is inaccurate.');
+       if (empty($vars['tb_id'])) {
+               tb_xml_msg(1, 'TrackBack Ping URL is inaccurate.');
        }
-       
-       $url = $post['url'];
+
+       $url   = $vars['url'];
        $tb_id = $vars['tb_id'];
-       
+
        // ¥Ú¡¼¥¸Â¸ºß¥Á¥§¥Ã¥¯
        $page = tb_id2page($tb_id);
-       if ($page === FALSE)
-       {
-               tb_xml_msg(1,'TrackBack ID is invalid.');
+       if ($page === FALSE) {
+               tb_xml_msg(1, 'TrackBack ID is invalid.');
        }
-       
+
        // URL ÂÅÅöÀ­¥Á¥§¥Ã¥¯ (¤³¤ì¤òÆþ¤ì¤ë¤È½èÍý»þ´Ö¤ËÌäÂ꤬¤Ç¤ë)
-       $result = http_request($url,'HEAD');
-       if ($result['rc'] !== 200)
-       {
-               tb_xml_msg(1,'URL is fictitious.');
+       $result = http_request($url, 'HEAD');
+       if ($result['rc'] !== 200) {
+               tb_xml_msg(1, 'URL is fictitious.');
        }
-       
+
        // TRACKBACK_DIR ¤Î¸ºß¤È½ñ¤­¹þ¤ß²Äǽ¤«¤Î³Îǧ
-       if (!file_exists(TRACKBACK_DIR))
-       {
-               tb_xml_msg(1,'No such directory');
+       if (!file_exists(TRACKBACK_DIR)) {
+               tb_xml_msg(1, 'No such directory');
        }
-       if (!is_writable(TRACKBACK_DIR))
-       {
-               tb_xml_msg(1,'Permission denied');
+       if (!is_writable(TRACKBACK_DIR)) {
+               tb_xml_msg(1, 'Permission denied');
        }
-       
+
        // TrackBack Ping ¤Î¥Ç¡¼¥¿¤ò¹¹¿·
-       $filename = TRACKBACK_DIR.$tb_id.'.txt';
+       $filename = tb_get_filename($page);
        $data = tb_get($filename);
-       
-       $charset = empty($post['charset']) ? 'auto' : $post['charset'];
-       
+
        $items = array(UTIME);
-       foreach ($fields as $field)
+       foreach ($fields as $key)
        {
-               $value = array_key_exists($field,$post) ? $post[$field] : '';
-               $value = mb_convert_encoding($value,SOURCE_ENCODING,$charset);
-               if (ereg("[,\"\n\r]",$value))
-               {
-                       $value = '"'.str_replace('"', '""', $value).'"';
+               $value = isset($vars[$key]) ? $vars[$key] : '';
+               if (preg_match("/[,\"\n\r]/", $value)) {
+                       $value = '"' . str_replace('"', '""', $value) . '"';
                }
-               $items[$field] = $value;
+               $items[$key] = $value;
        }
-       $data[$items['url']] = $items;
-       
-       $fp = fopen($filename,'w');
-       flock($fp,LOCK_EX);
-       foreach ($data as $line)
-       {
-               fwrite($fp,join(',',$line)."\n");
+       $data[rawurldecode($items['url'])] = $items;
+
+       $fp = fopen($filename, 'w');
+       set_file_buffer($fp, 0);
+       flock($fp, LOCK_EX);
+       rewind($fp);
+       foreach ($data as $line) {
+               $line = preg_replace('/[\r\n]/s', '', $line); // One line, one ping
+               fwrite($fp, join(',', $line) . "\n");
        }
-       flock($fp,LOCK_UN);
+       flock($fp, LOCK_UN);
        fclose($fp);
-       
-       tb_xml_msg(0,'');
+
+       tb_xml_msg(0, '');
 }
 
 // XML ·ë²Ì½ÐÎÏ
-function tb_xml_msg($rc,$msg)
+function tb_xml_msg($rc, $msg)
 {
        header('Content-Type: text/xml');
        echo '<?xml version="1.0" encoding="iso-8859-1"?>';
@@ -135,20 +124,20 @@ EOD;
 // ?__mode=rss ½èÍý
 function tb_mode_rss($tb_id)
 {
-       global $script,$vars,$entity_pattern;
-       
+       global $script, $vars, $entity_pattern;
+
        $page = tb_id2page($tb_id);
-       if ($page === FALSE)
-       {
+       if ($page === FALSE) {
                return FALSE;
        }
-       
+
        $items = '';
-       foreach (tb_get(TRACKBACK_DIR.$tb_id.'.txt') as $arr)
+       foreach (tb_get(tb_get_filename($page)) as $arr)
        {
+               // $utime and $blog_name is not used
                $utime = array_shift($arr);
-               list ($url,$title,$excerpt,$blog_name) = array_map(
-                       create_function('$a','return htmlspecialchars($a);'),$arr);
+               list ($url, $title, $excerpt, $blog_name) = array_map(
+                       create_function('$a', 'return htmlspecialchars($a);'), $arr);
                $items .= <<<EOD
 
    <item>
@@ -158,13 +147,13 @@ function tb_mode_rss($tb_id)
    </item>
 EOD;
        }
-       
+
        $title = htmlspecialchars($page);
-       $link = "$script?".rawurlencode($page);
+       $link = "$script?" . rawurlencode($page);
        $vars['page'] = $page;
-       $excerpt = strip_htmltag(convert_html(join('',get_source($page))));
-       $excerpt = preg_replace("/&$entity_pattern;/",'',$excerpt);
-       $excerpt = mb_strimwidth(preg_replace("/[\r\n]/",' ',$excerpt),0,255,'...');
+       $excerpt = strip_htmltag(convert_html(get_source($page)));
+       $excerpt = preg_replace("/&$entity_pattern;/", '', $excerpt);
+       $excerpt = mb_strimwidth(preg_replace("/[\r\n]/", ' ', $excerpt), 0, 255, '...');
 
        $rc = <<<EOD
 
@@ -180,40 +169,46 @@ EOD;
  </rss>
 </response>
 EOD;
-       $rc = mb_convert_encoding($rc,'UTF-8',SOURCE_ENCODING);
+       $rc = mb_convert_encoding($rc, 'UTF-8', SOURCE_ENCODING);
        header('Content-Type: text/xml');
        echo '<?xml version="1.0" encoding="utf-8" ?>';
        echo $rc;
        die;
 }
+
 // ?__mode=view ½èÍý
 function tb_mode_view($tb_id)
 {
-       global $script,$page_title;
-       global $_tb_title,$_tb_header,$_tb_entry,$_tb_refer,$_tb_date;
-       global $_tb_header_Excerpt,$_tb_header_Weblog,$_tb_header_Tracked;
-       
+       global $script, $page_title;
+       global $_tb_title, $_tb_header, $_tb_entry, $_tb_refer, $_tb_date;
+       global $_tb_header_Excerpt, $_tb_header_Weblog, $_tb_header_Tracked;
+
        // TrackBack ID ¤«¤é¥Ú¡¼¥¸Ì¾¤ò¼èÆÀ
        $page = tb_id2page($tb_id);
-       if ($page === FALSE)
-       {
+       if ($page === FALSE) {
                return FALSE;
        }
        $r_page = rawurlencode($page);
-       
-       $tb_title = sprintf($_tb_title,$page);
-       $tb_refer = sprintf($_tb_refer,"<a href=\"$script?$r_page\">'$page'</a>","<a href=\"$script\">$page_title</a>");
 
-       
-       $data = tb_get(TRACKBACK_DIR.$tb_id.'.txt');
-       
+       $tb_title = sprintf($_tb_title, $page);
+       $tb_refer = sprintf($_tb_refer, "<a href=\"$script?$r_page\">'$page'</a>", "<a href=\"$script\">$page_title</a>");
+
+
+       $data = tb_get(tb_get_filename($page));
+
        // ºÇ¿·ÈǤ«¤éÀ°Îó
-       usort($data,create_function('$a,$b','return $b[0] - $a[0];'));
-       
+       usort($data, create_function('$a,$b', 'return $b[0] - $a[0];'));
+
        $tb_body = '';
        foreach ($data as $x)
        {
-               list ($time,$url,$title,$excerpt,$blog_name) = $x;
+               if (count($x) != 5) {
+                       continue; // record broken
+               }
+               list ($time, $url, $title, $excerpt, $blog_name) = $x;
+               if ($title == '') {
+                       $title = 'no title';
+               }
                $time = date($_tb_date, $time + LOCALZONE); // May 2, 2003 11:25 AM
                $tb_body .= <<<EOD
 <div class="trackback-body">
@@ -238,7 +233,7 @@ EOD;
  <div class="blog">
   <div class="trackback-url">
    $_tb_entry<br />
-   $script?plugin=tb&amp;tb_id=$tb_id<br /><br />
+   $script?tb_id=$tb_id<br /><br />
    $tb_refer
   </div>
   $tb_body
@@ -246,8 +241,10 @@ EOD;
 </body>
 </html>
 EOD;
+       // BugTrack/466 ¥¨¥ó¥³¡¼¥É¸íǧÂкö
+       header('Content-type: text/html; charset=UTF-8');
        echo '<?xml version="1.0" encoding="UTF-8"?>';
-       echo mb_convert_encoding($msg,'UTF-8',SOURCE_ENCODING);
+       echo mb_convert_encoding($msg, 'UTF-8', SOURCE_ENCODING);
        die;
 }
 ?>