<?php
-// $Id: trackback.php,v 1.3 2004/12/11 15:44:45 henoheno Exp $
+// $Id: trackback.php,v 1.4 2004/12/12 08:35:24 henoheno Exp $
/*
- * PukiWiki TrackBack ¥×¥í¥°¥é¥à
+ * PukiWiki/TrackBack
* (C) 2003-2004 PukiWiki Developer Team
* (C) 2003, Katsumi Saito <katsumi@jo1upk.ymt.prug.or.jp>
* License: GPL
* http://localhost/pukiwiki/pukiwiki.php?FrontPage ¤ÈÌÀ³Î¤Ë»ØÄꤷ¤Ê¤¤¤È
* TrackBack ID ¤Î¼èÆÀ¤Ï¤Ç¤¤Ê¤¤
*
- * tb_get_id($page) TrackBack Ping ID¤ò¼èÆÀ
- * tb_id2page($tb_id) TrackBack Ping ID ¤«¤é¥Ú¡¼¥¸Ì¾¤ò¼èÆÀ
- * tb_get_filename($page) TrackBack Ping ¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë̾¤ò¼èÆÀ
- * tb_count($page) TrackBack Ping ¥Ç¡¼¥¿¸Ä¿ô¼èÆÀ // pukiwiki.skin.LANG.php
- * tb_send($page, $data) TrackBack Ping Á÷¿® // file.php
- * tb_delete($page) TrackBack Ping ¥Ç¡¼¥¿ºï½ü // edit.inc.php
+ * tb_get_id($page) Get TrackBack Ping ID from page name
+ * tb_id2page($tb_id) Get page name from TrackBack Ping ID
+ * tb_get_filename($page) Get file name of TrackBack Ping data
+ * tb_count($page) Count the number of TrackBack Pings included for the page
+ * // pukiwiki.skin.LANG.php
+ * tb_send($page, $data) Send TrackBack Ping(s) automatically // file.php
+ * tb_delete($page) Remove TrackBack Ping data // edit.inc.php
* tb_get($file, $key = 1) TrackBack Ping ¥Ç¡¼¥¿ÆþÎÏ
* tb_get_rdf($page) ʸ¾ÏÃæ¤ËËä¤á¹þ¤à¤¿¤á¤Îrdf¤ò¥Ç¡¼¥¿¤òÀ¸À® // pukiwiki.php
* tb_get_url($url) ʸ½ñ¤òGET¤·¡¢Ëä¤á¹þ¤Þ¤ì¤¿TrackBack Ping URL¤ò¼èÆÀ
* class TrackBack_XML XML¤«¤éTrackBack Ping ID¤ò¼èÆÀ¤¹¤ë¥¯¥é¥¹
* == Referer Âбþʬ ==
- * ref_save($page) Referer ¥Ç¡¼¥¿Êݸ(¹¹¿·) // pukiwiki.php
+ * ref_save($page) Save or update referer data // pukiwiki.php
*/
define('PLUGIN_TRACKBACK_VERSION', 'PukiWiki/TrackBack 0.2');
-// TrackBack Ping ID¤ò¼èÆÀ
+// Get TrackBack Ping ID from page name
function tb_get_id($page)
{
return md5($page);
}
-// TrackBack Ping ID ¤«¤é¥Ú¡¼¥¸Ì¾¤ò¼èÆÀ
+// Get page name from TrackBack Ping ID
function tb_id2page($tb_id)
{
static $pages, $cache = array();
$_tb_id = tb_get_id($page);
$cache[$_tb_id] = $page;
unset($pages[$page]);
- if ($_tb_id == $tb_id) return $page;
+ if ($tb_id == $_tb_id) return $cache[$tb_id];
}
- return FALSE; // Not found
+ $cache[$tb_id] = FALSE;
+
+ return $cache[$tb_id]; // Not found
}
-// TrackBack Ping ¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë̾¤ò¼èÆÀ
+// Get file name of TrackBack Ping data
function tb_get_filename($page, $ext = '.txt')
{
return TRACKBACK_DIR . encode($page) . $ext;
}
-// TrackBack Ping ¥Ç¡¼¥¿¸Ä¿ô¼èÆÀ
+// Count the number of TrackBack Pings included for the page
function tb_count($page, $ext = '.txt')
{
$filename = tb_get_filename($page, $ext);
return file_exists($filename) ? count(file($filename)) : 0;
}
-// Send TrackBack Ping
-// $plus = Newly added lines
-// $minus = Removed lines
+// Send TrackBack Ping(s) automatically
+// $plus = Newly added lines may include URLs
+// $minus = Removed lines may include URLs
function tb_send($page, $plus, $minus = '')
{
global $script, $trackback;
$r_page = rawurlencode($page);
$excerpt = strip_htmltag(convert_html(get_source($page)));
- // ¼«Ê¸½ñ¤Î¾ðÊó
+ // Sender's information
$putdata = array(
'title' => $page, // Title = It's page name
- 'url' => "$script?$r_page", // Á÷¿®»þ¤ËºÆÅÙ¡¢rawurlencode ¤µ¤ì¤ë
+ 'url' => "$script?$r_page", // will be rawurlencode() at send phase
'excerpt' => mb_strimwidth(preg_replace("/[\r\n]/", ' ', $excerpt), 0, 255, '...'),
'blog_name' => PLUGIN_TRACKBACK_VERSION,
- 'charset' => SOURCE_ENCODING // Á÷¿®Â¦Ê¸»ú¥³¡¼¥É(̤´ûÄê)
+ 'charset' => SOURCE_ENCODING // Ping text encoding (Not defined)
);
foreach ($links as $link) {
- // URL ¤«¤é TrackBack ID ¤ò¼èÆÀ¤¹¤ë
- $tb_id = tb_get_url($link);
+ $tb_id = tb_get_url($link); // Get Trackback ID from the URL
if (empty($tb_id)) continue; // Trackback is not supported
$result = http_request($tb_id, 'POST', '', $putdata);
}
}
-// TrackBack Ping ¥Ç¡¼¥¿ºï½ü
+// Remove TrackBack Ping data
function tb_delete($page)
{
$filename = tb_get_filename($page);
- if (file_exists($filename))
- @unlink($filename);
+ if (file_exists($filename)) @unlink($filename);
}
// TrackBack Ping ¥Ç¡¼¥¿ÆþÎÏ
function parse($buf, $url)
{
- // ½é´ü²½
+ // Init
$this->url = $url;
$this->tb_url = FALSE;
/* die(sprintf('XML error: %s at line %d in %s',
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser),
- $buf
- ));
+ $buf));
*/
return FALSE;
}
return $this->tb_url;
}
- function start_element($parser, $name, $attrs) {
+ function start_element($parser, $name, $attrs)
+ {
if ($name !== 'RDF:DESCRIPTION') return;
$about = $url = $tb_url = '';
foreach ($attrs as $key=>$value) {
switch ($key) {
- case 'RDF:ABOUT':
- $about = $value;
- break;
- case 'DC:IDENTIFER':
- case 'DC:IDENTIFIER':
- $url = $value;
- break;
- case 'TRACKBACK:PING':
- $tb_url = $value;
- break;
+ case 'RDF:ABOUT' : $about = $value; break;
+ case 'DC:IDENTIFER' : /*FALLTHROUGH*/
+ case 'DC:IDENTIFIER' : $url = $value; break;
+ case 'TRACKBACK:PING': $tb_url = $value; break;
}
}
- if ($about == $this->url || $url == $this->url) {
+ if ($about == $this->url || $url == $this->url)
$this->tb_url = $tb_url;
- }
}
function end_element($parser, $name) {}
}
-// Referer ¥Ç¡¼¥¿Êݸ(¹¹¿·)
+// Save or update referer data
function ref_save($page)
{
global $referer;
$url = $_SERVER['HTTP_REFERER'];
- // URI ¤ÎÂÅÅöÀɾ²Á
- // ¼«¥µ¥¤¥ÈÆâ¤Î¾ì¹ç¤Ï½èÍý¤·¤Ê¤¤
+ // Validate URI (Ignore own)
$parse_url = parse_url($url);
if (empty($parse_url['host']) || $parse_url['host'] == $_SERVER['HTTP_HOST'])
return;
- // TRACKBACK_DIR ¤Î¸ºß¤È½ñ¤¹þ¤ß²Äǽ¤«¤Î³Îǧ
- if (! is_dir(TRACKBACK_DIR)) die(TRACKBACK_DIR.': No such directory');
- if (! is_writable(TRACKBACK_DIR)) die(TRACKBACK_DIR.': Permission denied');
+ if (! is_dir(TRACKBACK_DIR)) die('No such directory: TRACKBACK_DIR');
+ if (! is_writable(TRACKBACK_DIR)) die('Permission denied: TRACKBACK_DIR');
- // Referer ¤Î¥Ç¡¼¥¿¤ò¹¹¿·
+ // Update referer data
if (ereg("[,\"\n\r]", $url))
$url = '"' . str_replace('"', '""', $url) . '"';
$data = tb_get($filename, 3);
$d_url = rawurldecode($url);
if (! isset($data[$d_url])) {
- // 0:ºÇ½ª¹¹¿·Æü»þ, 1:½é²óÅÐÏ¿Æü»þ, 2:»²¾È¥«¥¦¥ó¥¿, 3:Referer ¥Ø¥Ã¥À, 4:ÍøÍѲÄÈݥե饰(1¤Ï͸ú)
+ // 0:ºÇ½ª¹¹¿·Æü»þ, 1:½é²óÅÐÏ¿Æü»þ, 2:»²¾È¥«¥¦¥ó¥¿,
+ // 3:Referer ¥Ø¥Ã¥À, 4:ÍøÍѲÄÈݥե饰(1¤Ï͸ú)
$data[$d_url] = array(UTIME, UTIME, 0, $url, 1);
}
$data[$d_url][0] = UTIME;
set_file_buffer($fp, 0);
flock($fp, LOCK_EX);
rewind($fp);
- foreach ($data as $line) {
+ foreach ($data as $line)
fwrite($fp, join(',', $line) . "\n");
- }
flock($fp, LOCK_UN);
fclose($fp);