<?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"?>';
// ?__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>
</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
</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">
<div class="blog">
<div class="trackback-url">
$_tb_entry<br />
- $script?plugin=tb&tb_id=$tb_id<br /><br />
+ $script?tb_id=$tb_id<br /><br />
$tb_refer
</div>
$tb_body
</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;
}
?>