2 // $Id: tb.inc.php,v 1.13 2004/07/31 13:41:20 henoheno 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 $vars, $trackback;
19 // POST: TrackBack Ping ¤òÊݸ¤¹¤ë
20 if (!empty($vars['url']))
23 if ($trackback and !empty($vars['__mode']) and !empty($vars['tb_id'])) {
24 switch ($vars['__mode']) {
25 case 'rss': tb_mode_rss($vars['tb_id']); break;
26 case 'view': tb_mode_view($vars['tb_id']); break;
29 $pages = get_existpages(TRACKBACK_DIR, '.txt');
31 if (count($pages) == 0) {
32 return array('msg'=>'', 'body'=>'');
34 return array('msg'=>'trackback list', 'body'=>page_list($pages, 'read', FALSE));
38 // TrackBack Ping ¥Ç¡¼¥¿Êݸ(¹¹¿·)
41 global $script, $vars, $trackback;
42 static $fields = array( /* UTIME, */ 'url', 'title', 'excerpt', 'blog_name');
44 // µö²Ä¤·¤Æ¤¤¤Ê¤¤¤Î¤Ë¸Æ¤Ð¤ì¤¿¾ì¹ç¤ÎÂбþ
46 tb_xml_msg(1, 'Feature inactive.');
48 // TrackBack Ping ¤Ë¤ª¤±¤ë URL ¥Ñ¥é¥á¡¼¥¿¤Ïɬ¿Ü¤Ç¤¢¤ë¡£
49 if (empty($vars['url'])) {
50 tb_xml_msg(1, 'It is an indispensable parameter. URL is not set up.');
52 // Query String ¤òÆÀ¤ë
53 if (empty($vars['tb_id'])) {
54 tb_xml_msg(1, 'TrackBack Ping URL is inaccurate.');
58 $tb_id = $vars['tb_id'];
61 $page = tb_id2page($tb_id);
62 if ($page === FALSE) {
63 tb_xml_msg(1, 'TrackBack ID is invalid.');
66 // URL ÂÅÅöÀ¥Á¥§¥Ã¥¯ (¤³¤ì¤òÆþ¤ì¤ë¤È½èÍý»þ´Ö¤ËÌäÂ꤬¤Ç¤ë)
67 $result = http_request($url, 'HEAD');
68 if ($result['rc'] !== 200) {
69 tb_xml_msg(1, 'URL is fictitious.');
72 // TRACKBACK_DIR ¤Î¸ºß¤È½ñ¤¹þ¤ß²Äǽ¤«¤Î³Îǧ
73 if (!file_exists(TRACKBACK_DIR)) {
74 tb_xml_msg(1, 'No such directory');
76 if (!is_writable(TRACKBACK_DIR)) {
77 tb_xml_msg(1, 'Permission denied');
80 // TrackBack Ping ¤Î¥Ç¡¼¥¿¤ò¹¹¿·
81 $filename = tb_get_filename($page);
82 $data = tb_get($filename);
84 $items = array(UTIME);
85 foreach ($fields as $key)
87 $value = isset($vars[$key]) ? $vars[$key] : '';
88 if (preg_match("/[,\"\n\r]/", $value)) {
89 $value = '"' . str_replace('"', '""', $value) . '"';
91 $items[$key] = $value;
93 $data[rawurldecode($items['url'])] = $items;
95 $fp = fopen($filename, 'w');
96 set_file_buffer($fp, 0);
99 foreach ($data as $line) {
100 $line = preg_replace('/[\r\n]/s', '', $line); // One line, one ping
101 fwrite($fp, join(',', $line) . "\n");
110 function tb_xml_msg($rc, $msg)
112 header('Content-Type: text/xml');
113 echo '<?xml version="1.0" encoding="iso-8859-1"?>';
118 <message>$msg</message>
125 function tb_mode_rss($tb_id)
127 global $script, $vars, $entity_pattern;
129 $page = tb_id2page($tb_id);
130 if ($page === FALSE) {
135 foreach (tb_get(tb_get_filename($page)) as $arr)
137 // $utime and $blog_name is not used
138 $utime = array_shift($arr);
139 list ($url, $title, $excerpt, $blog_name) = array_map(
140 create_function('$a', 'return htmlspecialchars($a);'), $arr);
144 <title>$title</title>
146 <description>$excerpt</description>
151 $title = htmlspecialchars($page);
152 $link = "$script?" . rawurlencode($page);
153 $vars['page'] = $page;
154 $excerpt = strip_htmltag(convert_html(get_source($page)));
155 $excerpt = preg_replace("/&$entity_pattern;/", '', $excerpt);
156 $excerpt = mb_strimwidth(preg_replace("/[\r\n]/", ' ', $excerpt), 0, 255, '...');
164 <title>$title</title>
166 <description>$excerpt</description>
167 <language>ja-Jp</language>$items
172 $rc = mb_convert_encoding($rc, 'UTF-8', SOURCE_ENCODING);
173 header('Content-Type: text/xml');
174 echo '<?xml version="1.0" encoding="utf-8" ?>';
180 function tb_mode_view($tb_id)
182 global $script, $page_title;
183 global $_tb_title, $_tb_header, $_tb_entry, $_tb_refer, $_tb_date;
184 global $_tb_header_Excerpt, $_tb_header_Weblog, $_tb_header_Tracked;
186 // TrackBack ID ¤«¤é¥Ú¡¼¥¸Ì¾¤ò¼èÆÀ
187 $page = tb_id2page($tb_id);
188 if ($page === FALSE) {
191 $r_page = rawurlencode($page);
193 $tb_title = sprintf($_tb_title, $page);
194 $tb_refer = sprintf($_tb_refer, "<a href=\"$script?$r_page\">'$page'</a>", "<a href=\"$script\">$page_title</a>");
197 $data = tb_get(tb_get_filename($page));
200 usort($data, create_function('$a,$b', 'return $b[0] - $a[0];'));
203 foreach ($data as $x)
205 if (count($x) != 5) {
206 continue; // record broken
208 list ($time, $url, $title, $excerpt, $blog_name) = $x;
212 $time = date($_tb_date, $time + LOCALZONE); // May 2, 2003 11:25 AM
214 <div class="trackback-body">
215 <span class="trackback-post"><a href="$url" target="new">$title</a><br />
216 <strong>$_tb_header_Excerpt</strong> $excerpt<br />
217 <strong>$_tb_header_Weblog</strong> $blog_name<br />
218 <strong>$_tb_header_Tracked</strong> $time
224 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
225 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
227 <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
228 <title>$tb_title</title>
229 <link rel="stylesheet" href="skin/trackback.css" type="text/css" />
232 <div id="banner-commentspop">$_tb_header</div>
234 <div class="trackback-url">
236 $script?tb_id=$tb_id<br /><br />
244 // BugTrack/466 ¥¨¥ó¥³¡¼¥É¸íǧÂкö
245 header('Content-type: text/html; charset=UTF-8');
246 echo '<?xml version="1.0" encoding="UTF-8"?>';
247 echo mb_convert_encoding($msg, 'UTF-8', SOURCE_ENCODING);