function tb_delete($page) { $filename = tb_get_filename($page); if (file_exists($filename)) { @unlink($filename); } }
function plugin_referer_body($page, $sort) { global $script, $_referer_msg; global $referer; $data = tb_get(tb_get_filename($page, '.ref')); if (empty($data)) { return '<p>no data.</p>'; } $bg = plugin_referer_set_color(); $arrow_last = $arrow_1st = $arrow_ctr = ''; $color_last = $color_1st = $color_ctr = $color_ref = $bg['etc']; $sort_last = '0d'; $sort_1st = '1d'; $sort_ctr = '2d'; switch ($sort) { case '0d': // 0d 最終更新日時(新着順) usort($data, create_function('$a,$b', 'return $b[0] - $a[0];')); $color_last = $bg['cur']; $arrow_last = $_referer_msg['msg_Chr_darr']; $sort_last = '0a'; break; case '0a': // 0a 最終更新日時(日付順) usort($data, create_function('$a,$b', 'return $a[0] - $b[0];')); $color_last = $bg['cur']; $arrow_last = $_referer_msg['msg_Chr_uarr']; // $sort_last = '0d'; break; case '1d': // 1d 初回登録日時(新着順) usort($data, create_function('$a,$b', 'return $b[1] - $a[1];')); $color_1st = $bg['cur']; $arrow_1st = $_referer_msg['msg_Chr_darr']; $sort_1st = '1a'; break; case '1a': // 1a 初回登録日時(日付順) usort($data, create_function('$a,$b', 'return $a[1] - $b[1];')); $color_1st = $bg['cur']; $arrow_1st = $_referer_msg['msg_Chr_uarr']; // $sort_1st = '1d'; break; case '2d': // 2d カウンタ(大きい順) usort($data, create_function('$a,$b', 'return $b[2] - $a[2];')); $color_ctr = $bg['cur']; $arrow_ctr = $_referer_msg['msg_Chr_darr']; $sort_ctr = '2a'; break; case '2a': // 2a カウンタ(小さい順) usort($data, create_function('$a,$b', 'return $a[2] - $b[2];')); $color_ctr = $bg['cur']; $arrow_ctr = $_referer_msg['msg_Chr_uarr']; // $sort_ctr = '2d'; break; case '3': // 3 Referer usort($data, create_function('$a,$b', 'return ($a[3] == $b[3]) ? 0 : (($a[3] > $b[3]) ? 1 : -1);')); $color_ref = $bg['cur']; break; } $body = ''; $ctr = 0; foreach ($data as $arr) { // 0:最終更新日時, 1:初回登録日時, 2:参照カウンタ, 3:Referer ヘッダ, 4:利用可否フラグ(1は有効) list($ltime, $stime, $count, $url, $enable) = $arr; // 項目不正の場合の対応 // カウンタが数値ではない場合は、表示を抑止 if (!is_numeric($count)) { continue; } $sw_ignore = plugin_referer_ignore_check($url); if ($sw_ignore && $referer > 1) { continue; } // 非ASCIIキャラクタ(だけ)をURLエンコードしておく BugTrack/440 $e_url = htmlspecialchars(preg_replace('/([" \\x80-\\xff]+)/e', 'rawurlencode("$1")', $url)); $s_url = htmlspecialchars(mb_convert_encoding(rawurldecode($url), SOURCE_ENCODING, 'auto')); $s_url = mb_strimwidth($s_url, 0, REFERE_TITLE_LENGTH, '...'); $lpass = get_passage($ltime, FALSE); // 最終更新日時からの経過時間 $spass = get_passage($stime, FALSE); // 初回登録日時からの経過時間 $ldate = get_date($_referer_msg['msg_Fmt_Date'], $ltime); // 最終更新日時文字列 $sdate = get_date($_referer_msg['msg_Fmt_Date'], $stime); // 初回登録日時文字列 $body .= ' <tr>' . "\n" . ' <td>' . $ldate . '</td>' . "\n" . ' <td>' . $lpass . '</td>' . "\n"; $body .= $count == 1 ? ' <td colspan="2">N/A</td>' . "\n" : ' <td>' . $sdate . '</td>' . "\n" . ' <td>' . $spass . '</td>' . "\n"; $body .= ' <td style="text-align:right;">' . $count . '</td>' . "\n"; // 適用不可データのときはアンカーをつけない $body .= $sw_ignore ? ' <td>' . $s_url . '</td>' . "\n" : ' <td><a href="' . $e_url . '" rel="nofollow">' . $s_url . '</a></td>' . "\n"; $body .= ' </tr>' . "\n"; $ctr++; } if ($ctr === 0) { return '<p>no data.</p>'; } $href = $script . '?plugin=referer&page=' . rawurlencode($page); return <<<EOD <table border="1" cellspacing="1" summary="Referer"> <tr> <td style="background-color:{$color_last}" colspan="2"> <a href="{$href}&sort={$sort_last}">{$_referer_msg['msg_Hed_LastUpdate']}{$arrow_last}</a> </td> <td style="background-color:{$color_1st}" colspan="2"> <a href="{$href}&sort={$sort_1st}">{$_referer_msg['msg_Hed_1stDate']}{$arrow_1st}</a> </td> <td style="background-color:{$color_ctr};text-align:right"> <a href="{$href}&sort={$sort_ctr}">{$_referer_msg['msg_Hed_RefCounter']}{$arrow_ctr}</a> </td> <td style="background-color:{$color_ref}"> <a href="{$href}&sort=3">{$_referer_msg['msg_Hed_Referer']}</a> </td> </tr> {$body} </table> EOD; }
function ref_save($page) { global $referer; if (PKWK_READONLY || !$referer || empty($_SERVER['HTTP_REFERER'])) { return true; } $url = $_SERVER['HTTP_REFERER']; // Validate URI (Ignore own) $parse_url = parse_url($url); if (empty($parse_url['host']) || $parse_url['host'] == $_SERVER['HTTP_HOST']) { return true; } if (!is_dir(TRACKBACK_DIR)) { die('No such directory: TRACKBACK_DIR'); } if (!is_writable(TRACKBACK_DIR)) { die('Permission denied to write: TRACKBACK_DIR'); } // Update referer data if (ereg("[,\"\n\r]", $url)) { $url = '"' . str_replace('"', '""', $url) . '"'; } $filename = tb_get_filename($page, '.ref'); $data = tb_get($filename, 3); $d_url = rawurldecode($url); if (!isset($data[$d_url])) { $data[$d_url] = array('', UTIME, 0, $url, 1); } $data[$d_url][0] = UTIME; $data[$d_url][2]++; $fp = fopen($filename, 'w'); if ($fp === false) { return false; } set_file_buffer($fp, 0); flock($fp, LOCK_EX); rewind($fp); foreach ($data as $line) { fwrite($fp, join(',', $line) . "\n"); } flock($fp, LOCK_UN); fclose($fp); return true; }
function plugin_tb_output_htmllist($tb_id) { pkwk_common_headers(); echo 'This function had been removed now. It will be created soon.<br />' . "\n"; echo 'Sorry for your inconvenience.'; exit; // ---- // Skeleton Logic global $script; global $_tb_date; $page = tb_id2page($tb_id); if ($page === false) { return false; } $data = tb_get(tb_get_filename($page)); // Sort: The first is the latest usort($data, create_function('$a,$b', 'return $b[0] - $a[0];')); $tb_body = ''; foreach ($data as $x) { if (count($x) != 5) { continue; } // Ignore incorrect record 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 EOD; } // Output start pkwk_common_headers(); // BugTrack/466 Care for MSIE trouble // Logically correct, but MSIE will treat the data like 'file downloading' //header('Content-type: application/xhtml+xml; charset=UTF-8'); header('Content-type: text/html; charset=UTF-8'); // Works well $meta_content_type = pkwk_output_dtd(PKWK_DTD_XHTML_1_0_TRANSITIONAL, 'UTF-8'); $msg = <<<EOD <head> {$meta_content_type} </head> <body> {$script}?tb_id={$tb_id}<br /><br /> {$tb_body} </body> </html> EOD; echo mb_convert_encoding($msg, 'UTF-8', SOURCE_ENCODING); exit; }
function plugin_tb_recent($page, $line) { $body = ''; $tb_id = tb_get_id($page); $data = tb_get(tb_get_filename($page)); $ctr = count($data); if ($ctr == 0) { return ''; } if ($ctr > 1) { // Sort: The first is the latest usort($data, create_function('$a,$b', 'return $b[0] - $a[0];')); } $body .= '<h5>' . _("RECENT TRACKBACK") . "</h5>\n"; $body .= "<div>\n<ul class=\"recent_list\">\n"; $i = 0; foreach ($data as $x) { if (count($x) != 5) { continue; } // Ignore incorrect record list($time, $url, $title, $excerpt, $blog_name) = $x; if ($title == '') { $title = 'no title'; } $body .= '<li><a href="' . $url . '" title="' . $blog_name . ' ' . get_passage($time) . '" rel="nofollow">' . $title . '</a></li>' . "\n"; $i++; if ($line == 0) { continue; } if ($i >= $line) { break; } } if ($i == 0) { return ''; } $body .= "</ul>\n</div>\n"; return $body; }
function plugin_referer_body($page, $sort) { global $script; $qm = get_qm(); $data = tb_get(tb_get_filename($page, '.ref')); if (empty($data)) { return '<p>no data.</p>'; } $bg = plugin_referer_set_color(); $arrow_last = $arrow_1st = $arrow_ctr = ''; $color_last = $color_1st = $color_ctr = $color_ref = $bg['etc']; $sort_last = '0d'; $sort_1st = '1d'; $sort_ctr = '2d'; switch ($sort) { case '0d': // 0d 最終更新日時(新着順) usort($data, create_function('$a,$b', 'return $b[0] - $a[0];')); $color_last = $bg['cur']; $arrow_last = $qm->m['plg_referer']['down']; $sort_last = '0a'; break; case '0a': // 0a 最終更新日時(日付順) usort($data, create_function('$a,$b', 'return $a[0] - $b[0];')); $color_last = $bg['cur']; $arrow_last = $qm->m['plg_referer']['up']; // $sort_last = '0d'; break; case '1d': // 1d 初回登録日時(新着順) usort($data, create_function('$a,$b', 'return $b[1] - $a[1];')); $color_1st = $bg['cur']; $arrow_1st = $qm->m['plg_referer']['down']; $sort_1st = '1a'; break; case '1a': // 1a 初回登録日時(日付順) usort($data, create_function('$a,$b', 'return $a[1] - $b[1];')); $color_1st = $bg['cur']; $arrow_1st = $qm->m['plg_referer']['up']; // $sort_1st = '1d'; break; case '2d': // 2d カウンタ(大きい順) usort($data, create_function('$a,$b', 'return $b[2] - $a[2];')); $color_ctr = $bg['cur']; $arrow_ctr = $qm->m['plg_referer']['down']; $sort_ctr = '2a'; break; case '2a': // 2a カウンタ(小さい順) usort($data, create_function('$a,$b', 'return $a[2] - $b[2];')); $color_ctr = $bg['cur']; $arrow_ctr = $qm->m['plg_referer']['up']; // $sort_ctr = '2d'; break; case '3': // 3 Referer usort($data, create_function('$a,$b', 'return ($a[3] == $b[3]) ? 0 : (($a[3] > $b[3]) ? 1 : -1);')); $color_ref = $bg['cur']; break; } $body = ''; foreach ($data as $arr) { // 0:最終更新日時, 1:初回登録日時, 2:参照カウンタ, 3:Referer ヘッダ, 4:利用可否フラグ(1は有効) list($ltime, $stime, $count, $url, $enable) = $arr; // 非ASCIIキャラクタ(だけ)をURLエンコードしておく BugTrack/440 $e_url = htmlspecialchars(preg_replace('/([" \\x80-\\xff]+)/e', 'rawurlencode("$1")', $url)); $s_url = htmlspecialchars(mb_convert_encoding(rawurldecode($url), SOURCE_ENCODING, 'auto')); $lpass = get_passage($ltime, FALSE); // 最終更新日時からの経過時間 $spass = get_passage($stime, FALSE); // 初回登録日時からの経過時間 $ldate = get_date($qm->m['plg_referer']['date_format'], $ltime); // 最終更新日時文字列 $sdate = get_date($qm->m['plg_referer']['date_format'], $stime); // 初回登録日時文字列 $body .= ' <tr>' . "\n" . ' <td>' . $ldate . '</td>' . "\n" . ' <td>' . $lpass . '</td>' . "\n"; $body .= $count == 1 ? ' <td colspan="2">N/A</td>' . "\n" : ' <td>' . $sdate . '</td>' . "\n" . ' <td>' . $spass . '</td>' . "\n"; $body .= ' <td style="text-align:right;">' . $count . '</td>' . "\n"; // 適用不可データのときはアンカーをつけない $body .= plugin_referer_ignore_check($url) ? ' <td>' . $s_url . '</td>' . "\n" : ' <td><a href="' . $e_url . '" rel="nofollow">' . $s_url . '</a></td>' . "\n"; $body .= ' </tr>' . "\n"; } $href = $script . '?plugin=referer&page=' . rawurlencode($page); return <<<EOD <table border="1" cellspacing="1" summary="Referer"> <tr> <td style="background-color:{$color_last}" colspan="2"> <a href="{$href}&sort={$sort_last}">{$qm->m['plg_referer']['lastupdate']}{$arrow_last}</a> </td> <td style="background-color:{$color_1st}" colspan="2"> <a href="{$href}&sort={$sort_1st}">{$qm->m['plg_referer']['firstdate']}{$arrow_1st}</a> </td> <td style="background-color:{$color_ctr};text-align:right"> <a href="{$href}&sort={$sort_ctr}">{$qm->m['plg_referer']['counter']}{$arrow_ctr}</a> </td> <td style="background-color:{$color_ref}"> <a href="{$href}&sort=3">{$qm->m['plg_referer']['referer']}</a> </td> </tr> {$body} </table> EOD; }