OSDN Git Service

Check defined or undefined
[pukiwiki/pukiwiki.git] / plugin / referer.inc.php
1 <?php
2 // $Id: referer.inc.php,v 1.7 2004/07/31 03:09:20 henoheno Exp $
3 /*
4  * PukiWiki Referer ¥×¥é¥°¥¤¥ó(¥ê¥ó¥¯¸µÉ½¼¨¥×¥é¥°¥¤¥ó)
5  * (C) 2003, Katsumi Saito <katsumi@jo1upk.ymt.prug.or.jp>
6  * License: GPL
7 */
8
9 // ¹½À®ÄêµÁ¥Õ¥¡¥¤¥ë
10 define('CONFIG_REFERER','plugin/referer/config');
11
12 function plugin_referer_action()
13 {
14         global $vars,$referer;
15         global $_referer_msg;
16
17         // Refererµ¡Ç½¤ò»ÈÍѤ·¤Æ¤¤¤Ê¤¤
18         if (!$referer)
19         {
20                 return array('msg'=>'','body'=>'');
21         }
22
23         if (array_key_exists('page',$vars) and is_page($vars['page']))
24         {
25                 // À°Îó½ç
26                 $sort = (empty($vars['sort'])) ? '0d' : $vars['sort'];
27
28                 return array(
29                         'msg'  => $_referer_msg['msg_H0_Refer'],
30                         'body' => referer_body($vars['page'],$sort)
31                 );
32         }
33         $pages = get_existpages(TRACKBACK_DIR,'.ref');
34
35         if (count($pages) == 0)
36         {
37                 return array('msg'=>'','body'=>'');
38         }
39
40         return array(
41                 'msg' => 'referer list',
42                 'body' => page_list($pages,'referer',FALSE)
43         );
44 }
45
46 // Referer ÌÀºÙ¹ÔÊÔ½¸
47 function referer_body($page,$sort)
48 {
49         global $script,$_referer_msg;
50
51         $data = tb_get(tb_get_filename($page,'.ref'));
52         if (count($data) == 0)
53         {
54                 return '<p>no data.</p>';
55         }
56         $bg = referer_set_color();
57
58         $arrow_last = $arrow_1st = $arrow_ctr = '';
59         $color_last = $color_1st = $color_ctr = $color_ref = $bg['etc'];
60         $sort_last = '0d';
61         $sort_1st = '1d';
62         $sort_ctr = '2d';
63
64         switch ($sort)
65         {
66                 case '0d': // 0d ºÇ½ª¹¹¿·Æü»þ(¿·Ãå½ç)
67                         usort($data,create_function('$a,$b','return $b[0] - $a[0];'));
68                         $color_last = $bg['cur'];
69                         $arrow_last = $_referer_msg['msg_Chr_darr'];
70                         $sort_last = '0a';
71                         break;
72                 case '0a': // 0a ºÇ½ª¹¹¿·Æü»þ(ÆüÉÕ½ç)
73                         usort($data,create_function('$a,$b','return $a[0] - $b[0];'));
74                         $color_last = $bg['cur'];
75                         $arrow_last = $_referer_msg['msg_Chr_uarr'];
76 //                      $sort_last = '0d';
77                         break;
78                 case '1d': // 1d ½é²óÅÐÏ¿Æü»þ(¿·Ãå½ç)
79                         usort($data,create_function('$a,$b','return $b[1] - $a[1];'));
80                         $color_1st = $bg['cur'];
81                         $arrow_1st = $_referer_msg['msg_Chr_darr'];
82                         $sort_1st = '1a';
83                         break;
84                 case '1a': // 1a ½é²óÅÐÏ¿Æü»þ(ÆüÉÕ½ç)
85                         usort($data,create_function('$a,$b','return $a[1] - $b[1];'));
86                         $color_1st = $bg['cur'];
87                         $arrow_1st = $_referer_msg['msg_Chr_uarr'];
88 //                      $sort_1st = '1d';
89                         break;
90                 case '2d': // 2d ¥«¥¦¥ó¥¿(Â礭¤¤½ç)
91                         usort($data,create_function('$a,$b','return $b[2] - $a[2];'));
92                         $color_ctr = $bg['cur'];
93                         $arrow_ctr = $_referer_msg['msg_Chr_darr'];
94                         $sort_ctr = '2a';
95                         break;
96                 case '2a': // 2a ¥«¥¦¥ó¥¿(¾®¤µ¤¤½ç)
97                         usort($data,create_function('$a,$b','return $a[2] - $b[2];'));
98                         $color_ctr = $bg['cur'];
99                         $arrow_ctr = $_referer_msg['msg_Chr_uarr'];
100 //                      $sort_ctr = '2d';
101                         break;
102                 case '3': // 3 Referer
103                         usort($data,create_function('$a,$b','return ($a[3] == $b[3]) ? 0 : (($a[3] > $b[3]) ? 1 : -1);'));
104                         $color_ref = $bg['cur'];
105                         break;
106         }
107
108         $body = '';
109         foreach ($data as $arr)
110         {
111                 // 0:ºÇ½ª¹¹¿·Æü»þ, 1:½é²óÅÐÏ¿Æü»þ, 2:»²¾È¥«¥¦¥ó¥¿, 3:Referer ¥Ø¥Ã¥À, 4:ÍøÍѲÄÈݥե饰(1¤ÏÍ­¸ú)
112                 list($ltime,$stime,$count,$url,$enable) = $arr;
113
114                 // ÈóASCII¥­¥ã¥é¥¯¥¿(¤À¤±)¤òURL¥¨¥ó¥³¡¼¥É¤·¤Æ¤ª¤¯ BugTrack/440
115                 $e_url = htmlspecialchars(preg_replace('/([" \x80-\xff]+)/e','rawurlencode("$1")',$url));
116                 $s_url = htmlspecialchars(mb_convert_encoding(rawurldecode($url),SOURCE_ENCODING,'auto'));
117
118                 $lpass = get_passage($ltime,FALSE); // ºÇ½ª¹¹¿·Æü»þ¤«¤é¤Î·Ð²á»þ´Ö
119                 $spass = get_passage($stime,FALSE); // ½é²óÅÐÏ¿Æü»þ¤«¤é¤Î·Ð²á»þ´Ö
120                 $ldate = get_date($_referer_msg['msg_Fmt_Date'],$ltime); // ºÇ½ª¹¹¿·Æü»þʸ»úÎó
121                 $sdate = get_date($_referer_msg['msg_Fmt_Date'],$stime); // ½é²óÅÐÏ¿Æü»þʸ»úÎó
122
123                 $body .= " <tr>\n  <td>$ldate</td>\n  <td>$lpass</td>\n";
124                 $body .= ($count == 1) ? "  <td colspan=\"2\">N/A</td>\n" : "  <td>$sdate</td>\n  <td>$spass</td>\n";
125                 $body .= "  <td style=\"text-align:right;\">$count</td>\n";
126
127                 // Å¬ÍÑÉԲĥǡ¼¥¿¤Î¤È¤­¤Ï¥¢¥ó¥«¡¼¤ò¤Ä¤±¤Ê¤¤
128                 $body .= referer_ignore_check($url) ?
129                         "  <td>$s_url</td>\n" : "  <td><a href=\"$e_url\">$s_url</a></td>\n";
130                 $body .= " </tr>\n";
131         }
132         $href = $script.'?plugin=referer&amp;page='.rawurlencode($page);
133         return <<<EOD
134 <table border="1" cellspacing="1" summary="Referer">
135  <tr>
136   <td style="background-color:$color_last" colspan="2">
137    <a href="$href&amp;sort=$sort_last">{$_referer_msg['msg_Hed_LastUpdate']}$arrow_last</a>
138   </td>
139   <td style="background-color:$color_1st" colspan="2">
140    <a href="$href&amp;sort=$sort_1st">{$_referer_msg['msg_Hed_1stDate']}$arrow_1st</a>
141   </td>
142   <td style="background-color:$color_ctr;text-align:right">
143    <a href="$href&amp;sort=$sort_ctr">{$_referer_msg['msg_Hed_RefCounter']}$arrow_ctr</a>
144   </td>
145   <td style="background-color:$color_ref">
146    <a href="$href&amp;sort=3">{$_referer_msg['msg_Hed_Referer']}</a>
147    </td>
148  </tr>
149  $body
150 </table>
151 EOD;
152 }
153
154 function referer_set_color()
155 {
156         static $color;
157
158         if (!isset($color))
159         {
160                 // ¥Ç¥Õ¥©¥ë¥È¥«¥é¡¼
161                 $color = array(
162                         'cur' => '#88ff88',
163                         'etc' => '#cccccc'
164                 );
165
166                 $config = new Config(CONFIG_REFERER);
167                 $config->read();
168                 $pconfig_color = $config->get('COLOR');
169                 unset($config);
170                 foreach ($pconfig_color as $x)
171                 {
172                         // BGCOLOR(#88ff88)
173                         $color[$x[0]] = htmlspecialchars(
174                                 preg_match('/BGCOLOR\(([^)]+)\)/si',$x[1],$matches) ? $matches[1] : $x[1]
175                         );
176                 }
177         }
178         return $color;
179 }
180
181 function referer_ignore_check($url)
182 {
183         static $ignore_url;
184
185         // config.php
186         if (!isset($ignore_url))
187         {
188                 $config = new Config(CONFIG_REFERER);
189                 $config->read();
190                 $ignore_url = $config->get('IGNORE');
191                 unset($config);
192         }
193
194         foreach ($ignore_url as $x)
195         {
196                 if (strpos($url,$x) !== FALSE)
197                 {
198                         return 1;
199                 }
200         }
201         return 0;
202 }
203 ?>