OSDN Git Service

Convert character code of the source code to UTF-8 from EUC-JP
[pukiwiki/pukiwiki.git] / plugin / popular.inc.php
index e18f2e8..3d80c4a 100644 (file)
 <?php
-/////////////////////////////////////////////////
-// PukiWiki - Yet another WikiWikiWeb clone.
-//
-// $Id: popular.inc.php,v 1.8 2003/11/05 10:40:48 arino Exp $
+// PukiWiki - Yet another WikiWikiWeb clone
+// $Id: popular.inc.php,v 1.20 2011/01/25 15:01:01 henoheno Exp $
+// Copyright (C)
+//   2003-2005, 2007 PukiWiki Developers Team
+//   2002 Kazunori Mizushima <kazunori@uc.netyou.jp>
+// License: WHERE IS THE RECORD?
 //
+// Popular pages plugin: Show an access ranking of this wiki
+// -- like recent plugin, using counter plugin's count --
 
 /*
- * PukiWiki popular ¥×¥é¥°¥¤¥ó
- * (C) 2002, Kazunori Mizushima <kazunori@uc.netyou.jp>
+ * (C) 2003-2005 PukiWiki Developers Team
+ * (C) 2002 Kazunori Mizushima <kazunori@uc.netyou.jp>
  *
- * ¿Íµ¤¤Î¤¢¤ë(¥¢¥¯¥»¥¹¿ô¤Î¿¤¤)¥Ú¡¼¥¸¤Î°ìÍ÷¤ò recent ¥×¥é¥°¥¤¥ó¤Î¤è¤¦¤Ëɽ¼¨¤·¤Þ¤¹¡£
- * ÄÌ»»¤ª¤è¤Óº£Æü¤ËÊ̤±¤Æ°ìÍ÷¤òºî¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- * counter ¥×¥é¥°¥¤¥ó¤Î¥¢¥¯¥»¥¹¥«¥¦¥ó¥È¾ðÊó¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£
+ * 通算および今日に別けて一覧を作ることができます。
  *
- * [»ÈÍÑÎã]
- * #popular
- * #popular(20)
- * #popular(20,FrontPage|MenuBar)
- * #popular(20,FrontPage|MenuBar,true)
+ * [Usage]
+ *   #popular
+ *   #popular(20)
+ *   #popular(20,FrontPage|MenuBar)
+ *   #popular(20,FrontPage|MenuBar,true)
  *
- * [°ú¿ô]
- * 1 - É½¼¨¤¹¤ë·ï¿ô                             default 10
- * 2 - É½¼¨¤µ¤»¤Ê¤¤¥Ú¡¼¥¸¤ÎÀµµ¬É½¸½             default ¤Ê¤·
- * 3 - ÄÌ»»(true)¤«º£Æü(false)¤Î°ìÍ÷¤«¤Î¥Õ¥é¥°  default false
+ * [Arguments]
+ *   1 - 表示する件数                             default 10
+ *   2 - 表示させないページの正規表現             default なし
+ *   3 - é\80\9aç®\97(true)ã\81\8bä»\8aæ\97¥(false)ã\81®ä¸\80覧ã\81\8bã\81®ã\83\95ã\83©ã\82°  default false
  */
 
+define('PLUGIN_POPULAR_DEFAULT', 10);
+
 function plugin_popular_convert()
 {
+       global $vars, $whatsnew;
        global $_popular_plugin_frame, $_popular_plugin_today_frame;
-       global $script,$whatsnew,$non_list;
-       
-       $max = 10;
+
+       $max    = PLUGIN_POPULAR_DEFAULT;
        $except = '';
 
        $array = func_get_args();
        $today = FALSE;
-
        switch (func_num_args()) {
-       case 3:
-               if ($array[2])
-                       $today = get_date('Y/m/d');
-       case 2:
-               $except = $array[1];
-       case 1:
-               $max = $array[0];
+       case 3: if ($array[2]) $today = get_date('Y/m/d');
+       case 2: $except = $array[1];
+       case 1: $max    = $array[0];
        }
 
        $counters = array();
-
-       foreach (get_existpages(COUNTER_DIR,'.count') as $file=>$page) {
-               if ($except != '' and ereg($except,$page)) {
+       foreach (get_existpages(COUNTER_DIR, '.count') as $file=>$page) {
+               if (($except != '' && ereg($except, $page)) ||
+                   $page == $whatsnew || check_non_list($page) ||
+                   ! is_page($page))
                        continue;
-               }
-               if ($page == $whatsnew or preg_match("/$non_list/",$page) or !is_page($page)) {
-                       continue;
-               }
-               
-               $array = file(COUNTER_DIR.$file);
+
+               $array = file(COUNTER_DIR . $file);
                $count = rtrim($array[0]);
-               $date = rtrim($array[1]);
+               $date  = rtrim($array[1]);
                $today_count = rtrim($array[2]);
-               $yesterday_count = rtrim($array[3]);
-               
+
                if ($today) {
-                       if ($today == $date) {
-                               // $page¤¬¿ôÃͤ˸«¤¨¤ë(¤¿¤È¤¨¤Ðencode('BBS')=424253)¤È¤­¡¢
-                               // array_splice()¤Ë¤è¤Ã¤Æ¥­¡¼Ãͤ¬Êѹ¹¤µ¤ì¤Æ¤·¤Þ¤¦¤Î¤òËɤ°
-                               $counters["_$page"] = $today_count;
-                       }
-               }
-               else {
-                       $counters["_$page"] = $count;
+                       // $pageが数値に見える(たとえばencode('BBS')=424253)とき、
+                       // array_splice()によってキー値が変更されてしまうのを防ぐ
+                       // ため、キーに '_' を連結する
+                       if ($today == $date) $counters['_' . $page] = $today_count;
+               } else {
+                       $counters['_' . $page] = $count;
                }
        }
-       
+
        asort($counters, SORT_NUMERIC);
-       $counters = array_splice(array_reverse($counters,TRUE),0,$max);
-       
+
+       // BugTrack2/106: Only variables can be passed by reference from PHP 5.0.5
+       $counters = array_reverse($counters, TRUE); // with array_splice()
+       $counters = array_splice($counters, 0, $max);
+
        $items = '';
-       if (count($counters)) {
-               $items = '<ul class="popular_list">';
-               
+       if (! empty($counters)) {
+               $items = '<ul class="popular_list">' . "\n";
+
                foreach ($counters as $page=>$count) {
-                       $page = substr($page,1);
-                       
-                       $s_page = htmlspecialchars($page);
-                       $items .= " <li>".make_pagelink($page,"$s_page<span class=\"counter\">($count)</span>")."</li>\n";
+                       $page = substr($page, 1);
+
+                       $s_page = htmlsc($page);
+                       if ($page === $vars['page']) {
+                               // No need to link itself, notifies where you just read
+                               $pg_passage = get_pg_passage($page,FALSE);
+                               $items .= ' <li><span title="' . $s_page . ' ' . $pg_passage . '">' .
+                                       $s_page . '<span class="counter">(' . $count .
+                                       ')</span></span></li>' . "\n";
+                       } else {
+                               $items .= ' <li>' . make_pagelink($page,
+                                       $s_page . '<span class="counter">(' . $count . ')</span>') .
+                                       '</li>' . "\n";
+                       }
                }
-               $items .= '</ul>';
+               $items .= '</ul>' . "\n";
        }
-       return sprintf($today ? $_popular_plugin_today_frame : $_popular_plugin_frame,count($counters),$items);
-}
 
-?>
\ No newline at end of file
+       return sprintf($today ? $_popular_plugin_today_frame : $_popular_plugin_frame, count($counters), $items);
+}
+?>