OSDN Git Service

BugTrack/791: Fix typo 0,91 => 0.91
[pukiwiki/pukiwiki.git] / plugin / referer.inc.php
index 70b805d..56f0c45 100644 (file)
 <?php
-// $Id: referer.inc.php,v 1.1 2003/07/03 04:56:04 arino Exp $
+// $Id: referer.inc.php,v 1.10 2005/01/23 05:20:02 henoheno Exp $
 /*
  * PukiWiki Referer ¥×¥é¥°¥¤¥ó(¥ê¥ó¥¯¸µÉ½¼¨¥×¥é¥°¥¤¥ó)
  * (C) 2003, Katsumi Saito <katsumi@jo1upk.ymt.prug.or.jp>
  * License: GPL
 */
 
-// ¹½À®ÄêµÁ¥Õ¥¡¥¤¥ë
-define('CONFIG_REFERER','plugin/referer/config');
-
-function plugin_referer_action() {
-  global $script,$vars,$post,$referer;
-  global $_referer_msg;
-
-  // µö²Ä¤·¤Æ¤¤¤Ê¤¤¤Î¤Ë¸Æ¤Ð¤ì¤¿¾ì¹ç¤ÎÂбþ
-  if (!$referer) {
-    // ¥Ç¥Õ¥©¥ë¥È¤Ï¡¢PukiWiki ¤òɽ¼¨
-    header("Location: $script");
-    die();
-  }
-
-  // ¥Ú¡¼¥¸»ØÄê¤Ê¤·
-  if (empty($vars["page"])) {
-    header("Location: $script");
-    die();
-  }
-
-  // À°Îó½ç
-  $sort = $vars["sort"];
-  if (is_null($sort) || empty($sort)) {
-    $sort = "0d";
-  }
-
-  $retval['msg']  = $_referer_msg['msg_H0_Refer'];
-  $retval['body'] = referer_edit($vars["page"],$sort);
-  return $retval;
-}
-
-function referer_edit($page,$sort) {
-
-  $r_page = rawurlencode($page);
-  $file   = TRACKBACK_DIR.md5($r_page).".ref";
-  $data = tb_get($file);
-  if ($data === false) return "";
-
-  switch ($sort) {
-    case "0d":
-      usort($data, 'referer_sort_by_LastDate_d'); // 0d ºÇ½ª¹¹¿·Æü»þ(¿·Ãå½ç)
-      break;
-    case "0a":
-      usort($data, 'referer_sort_by_LastDate_a'); // 0a ºÇ½ª¹¹¿·Æü»þ(ÆüÉÕ½ç)
-      break;
-    case "1d":
-      usort($data, 'referer_sort_by_RegDate_d');  // 1d ½é²óÅÐÏ¿Æü»þ(¿·Ãå½ç)
-      break;
-    case "1a":
-      usort($data, 'referer_sort_by_RegDate_a');  // 1a ½é²óÅÐÏ¿Æü»þ(ÆüÉÕ½ç)
-      break;
-    case "2d":
-      usort($data, 'referer_sort_by_Counter_d');  // 2d ¥«¥¦¥ó¥¿(Â礭¤¤½ç)
-      break;
-    case "2a":
-      usort($data, 'referer_sort_by_Counter_a');  // 2a ¥«¥¦¥ó¥¿(¾®¤µ¤¤½ç)
-      break;
-    case "3":
-      usort($data, 'referer_sort_by_Referer');    // 3 Referer
-      break;
-    default:
-      $sort = "0d";
-      usort($data, 'referer_sort_by_LastDate_d'); // 0d ºÇ½ª¹¹¿·Æü»þ(¿·Ãå½ç)
-  }
-
-  $msg .= referer_body($data,$page,$sort);
-  return $msg;
+define('CONFIG_REFERER', 'plugin/referer/config');
+
+function plugin_referer_action()
+{
+       global $vars, $referer;
+       global $_referer_msg;
+
+       // Setting: Off
+       if (! $referer) return array('msg'=>'','body'=>'');
+
+       if (isset($vars['page']) && is_page($vars['page'])) {
+               $sort = (empty($vars['sort'])) ? '0d' : $vars['sort'];
+               return array(
+                       'msg'  => $_referer_msg['msg_H0_Refer'],
+                       'body' => plugin_referer_body($vars['page'], $sort));
+       }
+       $pages = get_existpages(TRACKBACK_DIR, '.ref');
+
+       if (empty($pages)) {
+               return array('msg'=>'', 'body'=>'');
+       } else {
+               return array(
+                       'msg'  => 'referer list',
+                       'body' => page_list($pages, 'referer', FALSE));
+       }
 }
 
 // Referer ÌÀºÙ¹ÔÊÔ½¸
-// 0:ºÇ½ª¹¹¿·Æü»þ, 1:½é²óÅÐÏ¿Æü»þ, 2:»²¾È¥«¥¦¥ó¥¿, 3:Referer ¥Ø¥Ã¥À, 4:ÍøÍѲÄÈݥե饰(1¤ÏÍ­¸ú)
-function referer_body($data,$page,$sort) {
-  global $_referer_msg, $pconfig_color;
-
-  $rc     = "";
-  $bg = referer_set_color();
-
-  $hed0   = "<td style=\"";
-  $hed1   = "\" colspan=\"2\">";
-  $hed2   = "<a href=\"./?plugin=referer&amp;page=".$page."&amp;sort=";
-
-  $hed_last = $hed0.$bg["etc"].$hed1.$hed2."0d\">".$_referer_msg['msg_Chr_darr']."</a>".$_referer_msg['msg_Hed_LastUpdate'].$hed2."0a\">".$_referer_msg['msg_Chr_uarr']."</a></td>\n";
-  $hed_1st  = $hed0.$bg["etc"].$hed1.$hed2."1d\">".$_referer_msg['msg_Chr_darr']."</a>".$_referer_msg['msg_Hed_1stDate'].$hed2."1a\">".$_referer_msg['msg_Chr_uarr']."</a></td>\n";
-  $hed_ctr  = $hed0.$bg["etc"]."text-align:right;\">".$hed2."2d\">".$_referer_msg['msg_Chr_darr']."</a>".$_referer_msg['msg_Hed_RefCounter'].$hed2."2a\">".$_referer_msg['msg_Chr_uarr']."</a></td>\n";
-  $hed_ref  = $hed0.$bg["etc"]."\">".$hed2."3\">".$_referer_msg['msg_Hed_Referer']."</a></td>\n";
-
-  switch ($sort) {
-    case "0d":
-      $hed_last = $hed0.$bg["cur"].$hed1.$_referer_msg['msg_Chr_darr'].$hed2."0d\">".$_referer_msg['msg_Hed_LastUpdate'].$hed2."0a\">".$_referer_msg['msg_Chr_uarr']."</a></td>\n";
-      break;
-    case "0a":
-      $hed_last = $hed0.$bg["cur"].$hed1.$_referer_msg['msg_Chr_uarr'].$hed2."0a\">".$_referer_msg['msg_Hed_LastUpdate'].$hed2."0d\">".$_referer_msg['msg_Chr_darr']."</a></td>\n";
-      break;
-    case "1d":
-      $hed_1st  = $hed0.$bg["cur"].$hed1.$_referer_msg['msg_Chr_darr'].$hed2."1d\">".$_referer_msg['msg_Hed_1stDate'].$hed2."1a\">".$_referer_msg['msg_Chr_uarr']."</a></td>\n";
-      break;
-    case "1a":
-      $hed_1st  = $hed0.$bg["cur"].$hed1.$_referer_msg['msg_Chr_uarr'].$hed2."1a\">".$_referer_msg['msg_Hed_1stDate'].$hed2."1d\">".$_referer_msg['msg_Chr_darr']."</a></td>\n";
-      break;
-    case "2d":
-      $hed_ctr  = $hed0.$bg["cur"]."text-align:right;\">".$_referer_msg['msg_Chr_darr'].$hed2."2d\">".$_referer_msg['msg_Hed_RefCounter'].$hed2."2a\">".$_referer_msg['msg_Chr_uarr']."</a></td>\n";
-      break;
-    case "2a":
-      $hed_ctr  = $hed0.$bg["cur"]."text-align:right;\">".$_referer_msg['msg_Chr_uarr'].$hed2."2a\">".$_referer_msg['msg_Hed_RefCounter'].$hed2."2d\">".$_referer_msg['msg_Chr_darr']."</a></td>\n";
-      break;
-    case "3":
-      $hed_ref  = $hed0.$bg["cur"]."\">".$hed2."3\">".$_referer_msg['msg_Hed_Referer']."</a></td>\n";
-      break;
-  }
-
-  $rc .= "<table border=\"1\" cellspacing=\"1\" summary=\"Referer\">\n<tr>\n".
-    $hed_last.$hed_1st.$hed_ctr.$hed_ref."</tr>\n";
-
-  foreach ($data as $x) {
-    // 0:ºÇ½ª¹¹¿·Æü»þ, 1:½é²óÅÐÏ¿Æü»þ, 2:»²¾È¥«¥¦¥ó¥¿, 3:Referer ¥Ø¥Ã¥À, 4:ÍøÍѲÄÈݥե饰(1¤ÏÍ­¸ú)
-    $progress0 = ereg_replace("[()]", "", get_passage($x[0])); // ºÇ½ª¹¹¿·Æü»þ¤«¤é¤Î·Ð²á»þ´Ö
-    $progress1 = ereg_replace("[()]", "", get_passage($x[1])); // ½é²óÅÐÏ¿Æü»þ¤«¤é¤Î·Ð²á»þ´Ö
-    $x[0] = date($_referer_msg['msg_Fmt_Date'], $x[0]+LOCALZONE); // ºÇ½ª¹¹¿·Æü»þʸ»úÎó
-    $x[1] = date($_referer_msg['msg_Fmt_Date'], $x[1]+LOCALZONE); // ½é²óÅÐÏ¿Æü»þʸ»úÎó
-    $url  = htmlspecialchars(rawurldecode(rawurldecode($x[3]))); // URL
-    $x[3] = htmlspecialchars(rawurldecode($x[3])); // URL
-    $rc .= "<tr>\n".
-       "<td>".$x[0]."</td>\n".
-       "<td>".$progress0."</td>\n";
-    if ($x[2] == 1) {
-      $rc .= "<td colspan=\"2\">N/A</td>\n";
-    } else {
-      $rc .= "<td>".$x[1]."</td>\n".
-       "<td>".$progress1."</td>\n";
-    }
-    $rc .= "<td style=\"text-align:right;\">".$x[2]."</td>\n";
-
-    if (referer_ignore_check($x[3])) {
-      // Å¬ÍÑÉԲĥǡ¼¥¿¤Î¤¿¤á¡¢¥¢¥ó¥«¡¼Ëõ»¦
-      $rc .= "<td>".$url."</td>\n";
-    } else {
-      $rc .= "<td><a href=\"$x[3]\">".$url."</a></td>\n";
-    }
-    $rc .= "</tr>\n";
-  }
-
-  $rc .= "</table>\n";
-  return $rc;
+function plugin_referer_body($page, $sort)
+{
+       global $script, $_referer_msg;
+
+       $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 = '';
+       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($_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 .= 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&amp;page=' . rawurlencode($page);
+       return <<<EOD
+<table border="1" cellspacing="1" summary="Referer">
+ <tr>
+  <td style="background-color:$color_last" colspan="2">
+   <a href="$href&amp;sort=$sort_last">{$_referer_msg['msg_Hed_LastUpdate']}$arrow_last</a>
+  </td>
+  <td style="background-color:$color_1st" colspan="2">
+   <a href="$href&amp;sort=$sort_1st">{$_referer_msg['msg_Hed_1stDate']}$arrow_1st</a>
+  </td>
+  <td style="background-color:$color_ctr;text-align:right">
+   <a href="$href&amp;sort=$sort_ctr">{$_referer_msg['msg_Hed_RefCounter']}$arrow_ctr</a>
+  </td>
+  <td style="background-color:$color_ref">
+   <a href="$href&amp;sort=3">{$_referer_msg['msg_Hed_Referer']}</a>
+   </td>
+ </tr>
+ $body
+</table>
+EOD;
 }
 
-function referer_set_color() {
-  global $pconfig_color;
-
-  // config.php
-  if (!count($pconfig_color)) {
-    $config = new Config(CONFIG_REFERER);
-    $config->read();
-    $pconfig_color = $config->get('COLOR');
-    unset($config);
-  }
-
-  // ¥Ç¥Õ¥©¥ë¥È¥«¥é¡¼
-  $rc["cur"] = "background-color:#88ff88;";
-  $rc["etc"] = "background-color:#cccccc;";
-
-  foreach ($pconfig_color as $x) {
-    // BGCOLOR(#88ff88)
-    preg_match("'BGCOLOR\((.*)\)'si", $x[1], $regs);
-    if (!empty($regs[1])) $x[1] = $regs[1];
-    $rc[ $x[0] ] = "background-color:".$x[1].";";
-  }
-  return $rc;
+function plugin_referer_set_color()
+{
+       static $color;
+
+       if (! isset($color)) {
+               // Default color
+               $color = array('cur' => '#88ff88', 'etc' => '#cccccc');
+
+               $config = new Config(CONFIG_REFERER);
+               $config->read();
+               $pconfig_color = $config->get('COLOR');
+               unset($config);
+
+               // BGCOLOR(#88ff88)
+               $matches = array();
+               foreach ($pconfig_color as $x)
+                       $color[$x[0]] = htmlspecialchars(
+                               preg_match('/BGCOLOR\(([^)]+)\)/si', $x[1], $matches) ?
+                                       $matches[1] : $x[1]);
+       }
+       return $color;
 }
 
-function referer_ignore_check($url) {
-  global $pconfig_ignore_url;
-
-  // config.php
-  if (!count($pconfig_ignore_url)) {
-    $config = new Config(CONFIG_REFERER);
-    $config->read();
-    $pconfig_ignore_url = $config->get('IGNORE');
-    unset($config);
-  }
-
-  foreach ($pconfig_ignore_url as $x) {
-    if (strpos($url,$x) === 0) return 1;
-  }
-  return 0;
+function plugin_referer_ignore_check($url)
+{
+       static $ignore_url;
+
+       // config.php
+       if (! isset($ignore_url)) {
+               $config = new Config(CONFIG_REFERER);
+               $config->read();
+               $ignore_url = $config->get('IGNORE');
+               unset($config);
+       }
+
+       foreach ($ignore_url as $x)
+               if (strpos($url, $x) !== FALSE)
+                       return 1;
+       return 0;
 }
-
-// ¥Ç¡¼¥¿¤òÀ°Îó
-// 0:ºÇ½ª¹¹¿·Æü»þ, 1:½é²óÅÐÏ¿Æü»þ, 2:»²¾È¥«¥¦¥ó¥¿, 3:Referer
-function referer_sort_by_LastDate_d($p1, $p2) { return ($p2['0'] - $p1['0']); }
-function referer_sort_by_LastDate_a($p1, $p2) { return ($p1['0'] - $p2['0']); }
-function referer_sort_by_RegDate_d($p1, $p2)  { return ($p2['1'] - $p1['1']); }
-function referer_sort_by_RegDate_a($p1, $p2)  { return ($p1['1'] - $p2['1']); }
-function referer_sort_by_Counter_d($p1, $p2)  { return ($p2['2'] - $p1['2']); }
-function referer_sort_by_Counter_a($p1, $p2)  { return ($p1['2'] - $p2['2']); }
-function referer_sort_by_Referer($p1, $p2) {
-  if ($p1['3'] == $p2['3']) return 0;
-  return ($p1['3'] > $p2['3']) ? 1 : -1;
-}
-
-?>
\ No newline at end of file
+?>