home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 April / PCWorld_2005-04_cd.bin / akce / web / phpbb2plus / phpBB2_plus_1.52.exe / phpBB2 / ranks.php < prev    next >
PHP Script  |  2004-07-18  |  9KB  |  261 lines

  1. <?php
  2. /***************************************************************************
  3.  *                            ranks.php
  4.  *                            ---------
  5.  *    begin                : 08/05/2003
  6.  *    copyright            : Ptirhiik
  7.  *    email                : admin@rpgnet-fr.com
  8.  *
  9.  *    version                : 1.0.3 - 26/07/2003
  10.  *
  11.  ***************************************************************************/
  12.  
  13. /***************************************************************************
  14.  *
  15.  *   This program is free software; you can redistribute it and/or modify
  16.  *   it under the terms of the GNU General Public License as published by
  17.  *   the Free Software Foundation; either version 2 of the License, or
  18.  *   (at your option) any later version.
  19.  *
  20.  *
  21.  ***************************************************************************/
  22.  
  23. // global pgm options
  24. $auth_rank_only_logged = true; // true will required to be logged to have access, false guest are welcome
  25. $spe_rank_max_users = -1; // number of displayed members in the memberlist : -1=all, 0=none, value=number
  26. $std_rank_max_users = 10; // number of displayed members in the memberlist : -1=all, 0=none, value=number
  27.  
  28. // check for inclusion
  29. if ( isset($check_access) ) return;
  30.  
  31. // start the prog
  32. define('IN_PHPBB', true);
  33. $phpbb_root_path = './';
  34. include($phpbb_root_path . 'extension.inc');
  35. include($phpbb_root_path . 'common.' . $phpEx);
  36.  
  37. $rank_extended = function_exists(extended_rank);
  38. $profilcp = file_exists($phpbb_root_path . 'profilcp/functions_profile.' . $phpEx);
  39. if ($profilcp)
  40. {
  41.     $rank_extended = false;
  42.     include($phpbb_root_path . 'profilcp/functions_profile.' . $phpEx);
  43. }
  44.  
  45. function get_rank_title($rank_title)
  46. {
  47.     global $rank_extended, $profilcp, $lang;
  48.  
  49.     $res = $rank_title;
  50.     if ($rank_extended || $profilcp)
  51.     {
  52.         $ranks = explode( "|", $rank_title);
  53.         $res = '';
  54.         $res .= (isset($ranks[1]) && !empty($ranks[1])) ? '<b>' . $lang['Male'] . ': </b>' . $ranks[1] . '<br />': '';
  55.         $res .= (isset($ranks[1]) && !empty($ranks[2])) ? '<b>' . $lang['Female'] . ': </b>' . $ranks[2] . '<br />' : '';
  56.         $res .= '<b>' . $lang['No_gender_specify'] . ': </b>' . $ranks[0];
  57.     }
  58.     return $res;
  59. }
  60.  
  61. //
  62. // Start session management
  63. //
  64. $userdata = session_pagestart($user_ip, PAGE_INDEX);
  65. init_userprefs($userdata);
  66. //
  67. // End session management
  68. //
  69.  
  70. // only registered members have access if desired
  71. if ( $auth_rank_only_logged && !$userdata['session_logged_in'] )
  72. {
  73.     redirect(append_sid('login.' . $phpEx . '?redirect=ranks.' . $phpEx, true));
  74.     exit;
  75. }
  76.  
  77. //
  78. // special ranks
  79. $spe_ranks = array();
  80. $sql = "SELECT * FROM " . RANKS_TABLE . " WHERE rank_special = 1 ORDER BY rank_title";
  81. if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, 'Couldn\'t read special ranks', '', __LINE__, __FILE__, $sql);
  82. while ($row = $db->sql_fetchrow($result) ) $spe_ranks[] = $row;
  83. for ($i=0; $i < count($spe_ranks); $i++ )
  84. {
  85.     $rank = $spe_ranks[$i]['rank_id'];
  86.     $rank_title = $spe_ranks[$i]['rank_title'];
  87.     $spe_ranks[$i]['user_number'] = 0;
  88.     $spe_ranks[$i]['users_list'] = '';
  89.  
  90.     // base sql request
  91.     $sql_base = "SELECT * FROM " . USERS_TABLE . " WHERE user_active = 1 AND user_rank = $rank ORDER BY username";
  92.  
  93.     // get the number of users having this rank
  94.     $sql = $sql_base;
  95.     if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, 'Couldn\'t read users', '', __LINE__, __FILE__, $sql);
  96.     $spe_ranks[$i]['user_number'] = $db->sql_numrows($result);
  97.  
  98.     // get the user list
  99.     if ( $spe_rank_max_users != 0 )
  100.     {
  101.         $sql = $sql_base;
  102.         if ( $spe_rank_max_users > 0 ) $sql .= " LIMIT 0, " . ($spe_rank_max_users + 1);
  103.         if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, 'Couldn\'t read users', '', __LINE__, __FILE__, $sql);
  104.         $j = 0;
  105.         while ( $row = $db->sql_fetchrow($result) )
  106.         {
  107.             $j++;
  108.             if ( ($spe_rank_max_users <= 0) || ( $j <= $spe_rank_max_users ) )
  109.             {
  110.                 $spe_ranks[$i]['users_list'] .= ($spe_ranks[$i]['users_list'] == '') ? '' : ', ';
  111.                 $spe_ranks[$i]['users_list'] .= '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id'] ) . '" class="gensmall">' . $row['username'] . '</a>';
  112.             }
  113.             else
  114.             {
  115.                 $spe_ranks[$i]['users_list'] .= ($spe_ranks[$i]['users_list'] == '') ? '' : ', ';
  116.                 $spe_ranks[$i]['users_list'] .= ( !$profilcp ) ? '...' : '<a href="' . append_sid("profile.$phpEx?mode=buddy&sub=memberlist&filter=user_rank_title&comp=eq&fvalue=$rank_title") . '" class="gensmall">...</a>';
  117.             }
  118.         }
  119.     }
  120.     if ($spe_ranks[$i]['user_number'] > 0) $spe_ranks[$i]['users_list'] = '(' . $spe_ranks[$i]['user_number'] . ') ' . $spe_ranks[$i]['users_list'];
  121. }
  122.  
  123. //
  124. // standard ranks
  125. $ranks = array();
  126. $sql = "SELECT * FROM " . RANKS_TABLE . " WHERE rank_special <> 1 ORDER BY rank_min";
  127. if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, 'Couldn\'t read standard ranks', '', __LINE__, __FILE__, $sql);
  128. while ($row = $db->sql_fetchrow($result) ) $ranks[] = $row;
  129.  
  130. $rank_max = 99999999;
  131. for ($i=count($ranks)-1; $i >=0; $i--)
  132. {
  133.     $ranks[$i]['rank_max'] = $rank_max;
  134.     $rank_title = $ranks[$i]['rank_title'];
  135.     $rank_min = $ranks[$i]['rank_min'];
  136.     
  137.     // count users
  138.     $sql_base = "SELECT * FROM " . USERS_TABLE . " WHERE user_active = 1 AND (user_rank = 0 OR user_rank IS NULL) AND user_posts >= $rank_min" . (($rank_max < 99999999)  ? " AND user_posts < $rank_max" : "" );
  139.  
  140.     // get the number of users having this rank
  141.     $sql = $sql_base;
  142.     if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, 'Couldn\'t read users', '', __LINE__, __FILE__, $sql);
  143.     $ranks[$i]['user_number'] = $db->sql_numrows($result);
  144.  
  145.     // get the user list
  146.     if ( $std_rank_max_users != 0 )
  147.     {
  148.         $sql = $sql_base;
  149.         if ( $std_rank_max_users > 0 ) $sql .= " LIMIT 0, " . ($std_rank_max_users + 1);
  150.         if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, 'Couldn\'t read users', '', __LINE__, __FILE__, $sql);
  151.         $j = 0;
  152.         while ( $row = $db->sql_fetchrow($result) )
  153.         {
  154.             $j++;
  155.             if ( ($std_rank_max_users <= 0) || ( $j <= $std_rank_max_users ) )
  156.             {
  157.                 $ranks[$i]['users_list'] .= ($ranks[$i]['users_list'] == '') ? '' : ', ';
  158.                 $ranks[$i]['users_list'] .= '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id'] ) . '" class="gensmall">' . $row['username'] . '</a>';
  159.             }
  160.             else
  161.             {
  162.                 $ranks[$i]['users_list'] .= ($ranks[$i]['users_list'] == '') ? '' : ', ';
  163.                 $ranks[$i]['users_list'] .= ( !$profilcp ) ? '...' : '<a href="' . append_sid("profile.$phpEx?mode=buddy&sub=memberlist&filter=user_rank_title&comp=eq&fvalue=$rank_title") . '" class="gensmall">...</a>';
  164.             }
  165.         }
  166.     }
  167.  
  168.     // store the next limit
  169.     $rank_max = $ranks[$i]['rank_min'];
  170.  
  171.     // number of user beyond userlist
  172.     if ($ranks[$i]['user_number'] > 0) $ranks[$i]['users_list'] = '(' . $ranks[$i]['user_number'] . ') ' . $ranks[$i]['users_list'];
  173. }
  174.  
  175. //
  176. // set the page title and include the page header
  177. //
  178. $page_title = $lang['Ranks'];
  179. include ($phpbb_root_path . 'includes/page_header.'.$phpEx);
  180. //
  181. // template setting
  182. //
  183. $template->set_filenames(array(
  184.     'body' => 'ranks_body.tpl')
  185. );
  186.  
  187. // constants
  188. $template->assign_vars(array(
  189.     'L_SPECIAL_RANKS' => $lang['Special_ranks'],
  190.     'L_USERS_LIST' => $lang['Memberlist'],
  191.     'L_RANKS' => $lang['Ranks'],
  192.     'L_MINI' => $lang['Rank_minimum'],
  193.     'L_TOTAL_USERS' => $lang['Total_users'],
  194.     'SPAN_USERLIST_STD' => ($std_rank_max_users != 0) ? 2 : 1,
  195.     'S_HIDDEN_FIELDS' => '',
  196.     )
  197. );
  198.  
  199. // standard ranks
  200. if ($std_rank_max_users != 0)
  201. {
  202.     $template->assign_block_vars('std_userlist', array());
  203. }
  204. else $template->assign_block_vars('no_std_userlist', array());
  205.  
  206. for ($i=0; $i < count($ranks); $i++)
  207. {
  208.     $template->assign_block_vars('ranks', array(
  209.         'RANK_TITLE' => get_rank_title($ranks[$i]['rank_title']),
  210.         'RANK_IMAGE' => ($ranks[$i]['rank_image'] == '') ? '' : '<img src="' . $ranks[$i]['rank_image'] . '" border=0 align="center">',
  211.         'RANK_MINI'  => $ranks[$i]['rank_min'],
  212.         'RANK_TOTAL' => $ranks[$i]['user_number'],
  213.         )
  214.     );
  215.     if ($std_rank_max_users != 0)
  216.     {
  217.         $template->assign_block_vars('ranks.userlist', array(
  218.             'USERS_LIST' => $ranks[$i]['users_list'],
  219.             )
  220.         );
  221.     }
  222.     else $template->assign_block_vars('ranks.no_userlist', array());
  223. }
  224.  
  225. // special ranks
  226. if ($spe_rank_max_users != 0)
  227. {
  228.     $template->assign_block_vars('spe_userlist', array());
  229. }
  230. else $template->assign_block_vars('no_spe_userlist', array());
  231.  
  232. for ($i=0; $i < count($spe_ranks); $i++)
  233. {
  234.     $template->assign_block_vars('spe_ranks', array(
  235.         'RANK_TITLE' => get_rank_title($spe_ranks[$i]['rank_title']),
  236.         'RANK_IMAGE' => ($spe_ranks[$i]['rank_image'] == '') ? '' : '<img src="' . $spe_ranks[$i]['rank_image'] . '" border=0 align="center">',
  237.         )
  238.     );
  239.     if ($spe_rank_max_users != 0)
  240.     {
  241.         $template->assign_block_vars('spe_ranks.userlist', array(
  242.             'USERS_LIST' => $spe_ranks[$i]['users_list'],
  243.             )
  244.         );
  245.     }
  246.     else
  247.     {
  248.         $template->assign_block_vars('spe_ranks.no_userlist', array(
  249.             'RANK_TOTAL' => $spe_ranks[$i]['user_number'],
  250.             )
  251.         );
  252.     }
  253. }
  254.  
  255. //
  256. // page footer
  257. //
  258. $template->pparse('body');
  259. include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
  260.  
  261. ?>