2 // $Id: tb.inc.php,v 1.9 2004/03/18 09:21:54 arino Exp $
4 * PukiWiki TrackBack ¥×¥í¥°¥é¥à
5 * (C) 2003, Katsumi Saito <katsumi@jo1upk.ymt.prug.or.jp>
8 * plugin_tb_action() action
9 * tb_save() TrackBack Ping ¥Ç¡¼¥¿Êݸ(¹¹¿·)
10 * tb_xml_msg($rc,$msg) XML ·ë²Ì½ÐÎÏ
11 * tb_mode_rss($tb_id) ?__mode=rss ½èÍý
12 * tb_mode_view($tb_id) ?__mode=view ½èÍý
15 function plugin_tb_action()
17 global $script,$vars,$trackback;
19 // POST: TrackBack Ping ¤òÊݸ¤¹¤ë
20 if (!empty($vars['url']))
25 if ($trackback and !empty($vars['__mode']) and !empty($vars['tb_id']))
27 switch ($vars['__mode'])
30 tb_mode_rss($vars['tb_id']);
33 tb_mode_view($vars['tb_id']);
37 $pages = get_existpages(TRACKBACK_DIR,'.txt');
39 if (count($pages) == 0)
41 return array('msg'=>'','body'=>'');
45 'msg' => 'trackback list',
46 'body' => page_list($pages,'read',FALSE)
50 // TrackBack Ping ¥Ç¡¼¥¿Êݸ(¹¹¿·)
53 global $script,$vars,$trackback;
54 static $fields = array(/* UTIME, */'url','title','excerpt','blog_name');
56 // µö²Ä¤·¤Æ¤¤¤Ê¤¤¤Î¤Ë¸Æ¤Ð¤ì¤¿¾ì¹ç¤ÎÂбþ
59 tb_xml_msg(1,'Feature inactive.');
61 // TrackBack Ping ¤Ë¤ª¤±¤ë URL ¥Ñ¥é¥á¡¼¥¿¤Ïɬ¿Ü¤Ç¤¢¤ë¡£
62 if (empty($vars['url']))
64 tb_xml_msg(1,'It is an indispensable parameter. URL is not set up.');
66 // Query String ¤òÆÀ¤ë
67 if (empty($vars['tb_id']))
69 tb_xml_msg(1,'TrackBack Ping URL is inaccurate.');
73 $tb_id = $vars['tb_id'];
76 $page = tb_id2page($tb_id);
79 tb_xml_msg(1,'TrackBack ID is invalid.');
82 // URL ÂÅÅöÀ¥Á¥§¥Ã¥¯ (¤³¤ì¤òÆþ¤ì¤ë¤È½èÍý»þ´Ö¤ËÌäÂ꤬¤Ç¤ë)
83 $result = http_request($url,'HEAD');
84 if ($result['rc'] !== 200)
86 tb_xml_msg(1,'URL is fictitious.');
89 // TRACKBACK_DIR ¤Î¸ºß¤È½ñ¤¹þ¤ß²Äǽ¤«¤Î³Îǧ
90 if (!file_exists(TRACKBACK_DIR))
92 tb_xml_msg(1,'No such directory');
94 if (!is_writable(TRACKBACK_DIR))
96 tb_xml_msg(1,'Permission denied');
99 // TrackBack Ping ¤Î¥Ç¡¼¥¿¤ò¹¹¿·
100 $filename = tb_get_filename($page);
101 $data = tb_get($filename);
103 $items = array(UTIME);
104 foreach ($fields as $field)
106 $value = array_key_exists($field,$vars) ? $vars[$field] : '';
107 if (ereg("[,\"\n\r]",$value))
109 $value = '"'.str_replace('"', '""', $value).'"';
111 $items[$field] = $value;
113 $data[rawurldecode($items['url'])] = $items;
115 $fp = fopen($filename,'w');
116 set_file_buffer($fp, 0);
119 foreach ($data as $line)
121 fwrite($fp,join(',',$line)."\n");
130 function tb_xml_msg($rc,$msg)
132 header('Content-Type: text/xml');
133 echo '<?xml version="1.0" encoding="iso-8859-1"?>';
138 <message>$msg</message>
145 function tb_mode_rss($tb_id)
147 global $script,$vars,$entity_pattern;
149 $page = tb_id2page($tb_id);
156 foreach (tb_get(tb_get_filename($page)) as $arr)
158 $utime = array_shift($arr);
159 list ($url,$title,$excerpt,$blog_name) = array_map(
160 create_function('$a','return htmlspecialchars($a);'),$arr);
164 <title>$title</title>
166 <description>$excerpt</description>
171 $title = htmlspecialchars($page);
172 $link = "$script?".rawurlencode($page);
173 $vars['page'] = $page;
174 $excerpt = strip_htmltag(convert_html(get_source($page)));
175 $excerpt = preg_replace("/&$entity_pattern;/",'',$excerpt);
176 $excerpt = mb_strimwidth(preg_replace("/[\r\n]/",' ',$excerpt),0,255,'...');
184 <title>$title</title>
186 <description>$excerpt</description>
187 <language>ja-Jp</language>$items
192 $rc = mb_convert_encoding($rc,'UTF-8',SOURCE_ENCODING);
193 header('Content-Type: text/xml');
194 echo '<?xml version="1.0" encoding="utf-8" ?>';
199 function tb_mode_view($tb_id)
201 global $script,$page_title;
202 global $_tb_title,$_tb_header,$_tb_entry,$_tb_refer,$_tb_date;
203 global $_tb_header_Excerpt,$_tb_header_Weblog,$_tb_header_Tracked;
205 // TrackBack ID ¤«¤é¥Ú¡¼¥¸Ì¾¤ò¼èÆÀ
206 $page = tb_id2page($tb_id);
211 $r_page = rawurlencode($page);
213 $tb_title = sprintf($_tb_title,$page);
214 $tb_refer = sprintf($_tb_refer,"<a href=\"$script?$r_page\">'$page'</a>","<a href=\"$script\">$page_title</a>");
217 $data = tb_get(tb_get_filename($page));
220 usort($data,create_function('$a,$b','return $b[0] - $a[0];'));
223 foreach ($data as $x)
230 list ($time,$url,$title,$excerpt,$blog_name) = $x;
235 $time = date($_tb_date, $time + LOCALZONE); // May 2, 2003 11:25 AM
237 <div class="trackback-body">
238 <span class="trackback-post"><a href="$url" target="new">$title</a><br />
239 <strong>$_tb_header_Excerpt</strong> $excerpt<br />
240 <strong>$_tb_header_Weblog</strong> $blog_name<br />
241 <strong>$_tb_header_Tracked</strong> $time
247 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
248 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
250 <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
251 <title>$tb_title</title>
252 <link rel="stylesheet" href="skin/trackback.css" type="text/css" />
255 <div id="banner-commentspop">$_tb_header</div>
257 <div class="trackback-url">
259 $script?tb_id=$tb_id<br /><br />
267 // BugTrack/466 ¥¨¥ó¥³¡¼¥É¸íǧÂкö
268 header('Content-type: text/html; charset=UTF-8');
269 echo '<?xml version="1.0" encoding="UTF-8"?>';
270 echo mb_convert_encoding($msg,'UTF-8',SOURCE_ENCODING);