PageRenderTime 34ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/root/garage/install/install/old/viewonline.php

https://github.com/poyntesm/phpbbgarage
PHP | 445 lines | 346 code | 72 blank | 27 comment | 64 complexity | edacd7b195bd6bfa91180133dac8cb80 MD5 | raw file
  1. <?php
  2. /**
  3. *
  4. * @package phpBB3
  5. * @version $Id: viewonline.php 8705 2008-07-28 16:55:00Z Kellanved $
  6. * @copyright (c) 2005 phpBB Group
  7. * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  8. *
  9. */
  10. /**
  11. * @ignore
  12. */
  13. define('IN_PHPBB', true);
  14. $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
  15. $phpEx = substr(strrchr(__FILE__, '.'), 1);
  16. include($phpbb_root_path . 'common.' . $phpEx);
  17. // Start session management
  18. $user->session_begin();
  19. $auth->acl($user->data);
  20. $user->setup('memberlist');
  21. // Get and set some variables
  22. $mode = request_var('mode', '');
  23. $session_id = request_var('s', '');
  24. $start = request_var('start', 0);
  25. $sort_key = request_var('sk', 'b');
  26. $sort_dir = request_var('sd', 'd');
  27. $show_guests= ($config['load_online_guests']) ? request_var('sg', 0) : 0;
  28. // Can this user view profiles/memberlist?
  29. if (!$auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel'))
  30. {
  31. if ($user->data['user_id'] != ANONYMOUS)
  32. {
  33. trigger_error('NO_VIEW_USERS');
  34. }
  35. login_box('', $user->lang['LOGIN_EXPLAIN_VIEWONLINE']);
  36. }
  37. $sort_key_text = array('a' => $user->lang['SORT_USERNAME'], 'b' => $user->lang['SORT_JOINED'], 'c' => $user->lang['SORT_LOCATION']);
  38. $sort_key_sql = array('a' => 'u.username_clean', 'b' => 's.session_time', 'c' => 's.session_page');
  39. // Sorting and order
  40. if (!isset($sort_key_text[$sort_key]))
  41. {
  42. $sort_key = 'b';
  43. }
  44. $order_by = $sort_key_sql[$sort_key] . ' ' . (($sort_dir == 'a') ? 'ASC' : 'DESC');
  45. // Whois requested
  46. if ($mode == 'whois' && $auth->acl_get('a_') && $session_id)
  47. {
  48. include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
  49. $sql = 'SELECT u.user_id, u.username, u.user_type, s.session_ip
  50. FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . " s
  51. WHERE s.session_id = '" . $db->sql_escape($session_id) . "'
  52. AND u.user_id = s.session_user_id";
  53. $result = $db->sql_query($sql);
  54. if ($row = $db->sql_fetchrow($result))
  55. {
  56. $template->assign_var('WHOIS', user_ipwhois($row['session_ip']));
  57. }
  58. $db->sql_freeresult($result);
  59. // Output the page
  60. page_header($user->lang['WHO_IS_ONLINE']);
  61. $template->set_filenames(array(
  62. 'body' => 'viewonline_whois.html')
  63. );
  64. make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
  65. page_footer();
  66. }
  67. // Forum info
  68. $sql = 'SELECT forum_id, forum_name, parent_id, forum_type, left_id, right_id
  69. FROM ' . FORUMS_TABLE . '
  70. ORDER BY left_id ASC';
  71. $result = $db->sql_query($sql, 600);
  72. $forum_data = array();
  73. while ($row = $db->sql_fetchrow($result))
  74. {
  75. $forum_data[$row['forum_id']] = $row;
  76. }
  77. $db->sql_freeresult($result);
  78. $guest_counter = 0;
  79. // Get number of online guests (if we do not display them)
  80. if (!$show_guests)
  81. {
  82. switch ($db->sql_layer)
  83. {
  84. case 'sqlite':
  85. $sql = 'SELECT COUNT(session_ip) as num_guests
  86. FROM (
  87. SELECT DISTINCT session_ip
  88. FROM ' . SESSIONS_TABLE . '
  89. WHERE session_user_id = ' . ANONYMOUS . '
  90. AND session_time >= ' . (time() - ($config['load_online_time'] * 60)) .
  91. ')';
  92. break;
  93. default:
  94. $sql = 'SELECT COUNT(DISTINCT session_ip) as num_guests
  95. FROM ' . SESSIONS_TABLE . '
  96. WHERE session_user_id = ' . ANONYMOUS . '
  97. AND session_time >= ' . (time() - ($config['load_online_time'] * 60));
  98. break;
  99. }
  100. $result = $db->sql_query($sql);
  101. $guest_counter = (int) $db->sql_fetchfield('num_guests');
  102. $db->sql_freeresult($result);
  103. }
  104. // Get user list
  105. $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_type, u.user_colour, s.session_id, s.session_time, s.session_page, s.session_ip, s.session_browser, s.session_viewonline, s.session_forum_id
  106. FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . ' s
  107. WHERE u.user_id = s.session_user_id
  108. AND s.session_time >= ' . (time() - ($config['load_online_time'] * 60)) .
  109. ((!$show_guests) ? ' AND s.session_user_id <> ' . ANONYMOUS : '') . '
  110. ORDER BY ' . $order_by;
  111. $result = $db->sql_query($sql);
  112. $prev_id = $prev_ip = $user_list = array();
  113. $logged_visible_online = $logged_hidden_online = $counter = 0;
  114. while ($row = $db->sql_fetchrow($result))
  115. {
  116. if ($row['user_id'] != ANONYMOUS && !isset($prev_id[$row['user_id']]))
  117. {
  118. $view_online = $s_user_hidden = false;
  119. $user_colour = ($row['user_colour']) ? ' style="color:#' . $row['user_colour'] . '" class="username-coloured"' : '';
  120. $username_full = ($row['user_type'] != USER_IGNORE) ? get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']) : '<span' . $user_colour . '>' . $row['username'] . '</span>';
  121. if (!$row['session_viewonline'])
  122. {
  123. $view_online = ($auth->acl_get('u_viewonline')) ? true : false;
  124. $logged_hidden_online++;
  125. $username_full = '<em>' . $username_full . '</em>';
  126. $s_user_hidden = true;
  127. }
  128. else
  129. {
  130. $view_online = true;
  131. $logged_visible_online++;
  132. }
  133. $prev_id[$row['user_id']] = 1;
  134. if ($view_online)
  135. {
  136. $counter++;
  137. }
  138. if (!$view_online || $counter > $start + $config['topics_per_page'] || $counter <= $start)
  139. {
  140. continue;
  141. }
  142. }
  143. else if ($show_guests && $row['user_id'] == ANONYMOUS && !isset($prev_ip[$row['session_ip']]))
  144. {
  145. $prev_ip[$row['session_ip']] = 1;
  146. $guest_counter++;
  147. $counter++;
  148. if ($counter > $start + $config['topics_per_page'] || $counter <= $start)
  149. {
  150. continue;
  151. }
  152. $s_user_hidden = false;
  153. $username_full = get_username_string('full', $row['user_id'], $user->lang['GUEST']);
  154. }
  155. else
  156. {
  157. continue;
  158. }
  159. preg_match('#^([a-z/]+)#i', $row['session_page'], $on_page);
  160. if (!sizeof($on_page))
  161. {
  162. $on_page[1] = '';
  163. }
  164. switch ($on_page[1])
  165. {
  166. case 'index':
  167. $location = $user->lang['INDEX'];
  168. $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
  169. break;
  170. case 'adm/index':
  171. $location = $user->lang['ACP'];
  172. $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
  173. break;
  174. case 'posting':
  175. case 'viewforum':
  176. case 'viewtopic':
  177. $forum_id = $row['session_forum_id'];
  178. if ($forum_id && $auth->acl_get('f_list', $forum_id))
  179. {
  180. $location = '';
  181. $location_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id);
  182. if ($forum_data[$forum_id]['forum_type'] == FORUM_LINK)
  183. {
  184. $location = sprintf($user->lang['READING_LINK'], $forum_data[$forum_id]['forum_name']);
  185. break;
  186. }
  187. switch ($on_page[1])
  188. {
  189. case 'posting':
  190. preg_match('#mode=([a-z]+)#', $row['session_page'], $on_page);
  191. $posting_mode = (!empty($on_page[1])) ? $on_page[1] : '';
  192. switch ($posting_mode)
  193. {
  194. case 'reply':
  195. case 'quote':
  196. $location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
  197. break;
  198. default:
  199. $location = sprintf($user->lang['POSTING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
  200. break;
  201. }
  202. break;
  203. case 'viewtopic':
  204. $location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']);
  205. break;
  206. case 'viewforum':
  207. $location = sprintf($user->lang['READING_FORUM'], $forum_data[$forum_id]['forum_name']);
  208. break;
  209. }
  210. }
  211. else
  212. {
  213. $location = $user->lang['INDEX'];
  214. $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
  215. }
  216. break;
  217. case 'search':
  218. $location = $user->lang['SEARCHING_FORUMS'];
  219. $location_url = append_sid("{$phpbb_root_path}search.$phpEx");
  220. break;
  221. case 'faq':
  222. $location = $user->lang['VIEWING_FAQ'];
  223. $location_url = append_sid("{$phpbb_root_path}faq.$phpEx");
  224. break;
  225. case 'viewonline':
  226. $location = $user->lang['VIEWING_ONLINE'];
  227. $location_url = append_sid("{$phpbb_root_path}viewonline.$phpEx");
  228. break;
  229. case 'memberlist':
  230. $location = (strpos($row['session_page'], 'mode=viewprofile') !== false) ? $user->lang['VIEWING_MEMBER_PROFILE'] : $user->lang['VIEWING_MEMBERS'];
  231. $location_url = append_sid("{$phpbb_root_path}memberlist.$phpEx");
  232. break;
  233. case 'mcp':
  234. $location = $user->lang['VIEWING_MCP'];
  235. $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
  236. break;
  237. case 'ucp':
  238. $location = $user->lang['VIEWING_UCP'];
  239. // Grab some common modules
  240. $url_params = array(
  241. 'mode=register' => 'VIEWING_REGISTER',
  242. 'i=pm&mode=compose' => 'POSTING_PRIVATE_MESSAGE',
  243. 'i=pm&' => 'VIEWING_PRIVATE_MESSAGES',
  244. 'i=profile&' => 'CHANGING_PROFILE',
  245. 'i=prefs&' => 'CHANGING_PREFERENCES',
  246. );
  247. foreach ($url_params as $param => $lang)
  248. {
  249. if (strpos($row['session_page'], $param) !== false)
  250. {
  251. $location = $user->lang[$lang];
  252. break;
  253. }
  254. }
  255. $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
  256. break;
  257. case 'download/file':
  258. $location = $user->lang['DOWNLOADING_FILE'];
  259. $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
  260. break;
  261. case 'report':
  262. $location = $user->lang['REPORTING_POST'];
  263. $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
  264. break;
  265. default:
  266. $location = $user->lang['INDEX'];
  267. $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
  268. break;
  269. }
  270. $template->assign_block_vars('user_row', array(
  271. 'USERNAME' => $row['username'],
  272. 'USERNAME_COLOUR' => $row['user_colour'],
  273. 'USERNAME_FULL' => $username_full,
  274. 'LASTUPDATE' => $user->format_date($row['session_time']),
  275. 'FORUM_LOCATION' => $location,
  276. 'USER_IP' => ($auth->acl_get('a_')) ? (($mode == 'lookup' && $session_id == $row['session_id']) ? gethostbyaddr($row['session_ip']) : $row['session_ip']) : '',
  277. 'USER_BROWSER' => ($auth->acl_get('a_user')) ? $row['session_browser'] : '',
  278. 'U_USER_PROFILE' => ($row['user_type'] != USER_IGNORE) ? get_username_string('profile', $row['user_id'], '') : '',
  279. 'U_USER_IP' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'mode=lookup' . (($mode != 'lookup' || $row['session_id'] != $session_id) ? '&amp;s=' . $row['session_id'] : '') . "&amp;sg=$show_guests&amp;start=$start&amp;sk=$sort_key&amp;sd=$sort_dir"),
  280. 'U_WHOIS' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'mode=whois&amp;s=' . $row['session_id']),
  281. 'U_FORUM_LOCATION' => $location_url,
  282. 'S_USER_HIDDEN' => $s_user_hidden,
  283. 'S_GUEST' => ($row['user_id'] == ANONYMOUS) ? true : false,
  284. 'S_USER_TYPE' => $row['user_type'],
  285. ));
  286. }
  287. $db->sql_freeresult($result);
  288. unset($prev_id, $prev_ip);
  289. // Generate reg/hidden/guest online text
  290. $vars_online = array(
  291. 'REG' => array('logged_visible_online', 'l_r_user_s'),
  292. 'HIDDEN'=> array('logged_hidden_online', 'l_h_user_s'),
  293. 'GUEST' => array('guest_counter', 'l_g_user_s')
  294. );
  295. foreach ($vars_online as $l_prefix => $var_ary)
  296. {
  297. switch ($$var_ary[0])
  298. {
  299. case 0:
  300. $$var_ary[1] = $user->lang[$l_prefix . '_USERS_ZERO_ONLINE'];
  301. break;
  302. case 1:
  303. $$var_ary[1] = $user->lang[$l_prefix . '_USER_ONLINE'];
  304. break;
  305. default:
  306. $$var_ary[1] = $user->lang[$l_prefix . '_USERS_ONLINE'];
  307. break;
  308. }
  309. }
  310. unset($vars_online);
  311. $pagination = generate_pagination(append_sid("{$phpbb_root_path}viewonline.$phpEx", "sg=$show_guests&amp;sk=$sort_key&amp;sd=$sort_dir"), $counter, $config['topics_per_page'], $start);
  312. // Grab group details for legend display
  313. if ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel'))
  314. {
  315. $sql = 'SELECT group_id, group_name, group_colour, group_type
  316. FROM ' . GROUPS_TABLE . '
  317. WHERE group_legend = 1
  318. ORDER BY group_name ASC';
  319. }
  320. else
  321. {
  322. $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type
  323. FROM ' . GROUPS_TABLE . ' g
  324. LEFT JOIN ' . USER_GROUP_TABLE . ' ug
  325. ON (
  326. g.group_id = ug.group_id
  327. AND ug.user_id = ' . $user->data['user_id'] . '
  328. AND ug.user_pending = 0
  329. )
  330. WHERE g.group_legend = 1
  331. AND (g.group_type <> ' . GROUP_HIDDEN . ' OR ug.user_id = ' . $user->data['user_id'] . ')
  332. ORDER BY g.group_name ASC';
  333. }
  334. $result = $db->sql_query($sql);
  335. $legend = '';
  336. while ($row = $db->sql_fetchrow($result))
  337. {
  338. if ($row['group_name'] == 'BOTS')
  339. {
  340. $legend .= (($legend != '') ? ', ' : '') . '<span style="color:#' . $row['group_colour'] . '">' . $user->lang['G_BOTS'] . '</span>';
  341. }
  342. else
  343. {
  344. $legend .= (($legend != '') ? ', ' : '') . '<a style="color:#' . $row['group_colour'] . '" href="' . append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $row['group_id']) . '">' . (($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']) . '</a>';
  345. }
  346. }
  347. $db->sql_freeresult($result);
  348. // Refreshing the page every 60 seconds...
  349. meta_refresh(60, append_sid("{$phpbb_root_path}viewonline.$phpEx", "sg=$show_guests&amp;sk=$sort_key&amp;sd=$sort_dir&amp;start=$start"));
  350. // Send data to template
  351. $template->assign_vars(array(
  352. 'TOTAL_REGISTERED_USERS_ONLINE' => sprintf($l_r_user_s, $logged_visible_online) . sprintf($l_h_user_s, $logged_hidden_online),
  353. 'TOTAL_GUEST_USERS_ONLINE' => sprintf($l_g_user_s, $guest_counter),
  354. 'LEGEND' => $legend,
  355. 'PAGINATION' => $pagination,
  356. 'PAGE_NUMBER' => on_page($counter, $config['topics_per_page'], $start),
  357. 'U_SORT_USERNAME' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sk=a&amp;sd=' . (($sort_key == 'a' && $sort_dir == 'a') ? 'd' : 'a') . '&amp;sg=' . ((int) $show_guests)),
  358. 'U_SORT_UPDATED' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sk=b&amp;sd=' . (($sort_key == 'b' && $sort_dir == 'a') ? 'd' : 'a') . '&amp;sg=' . ((int) $show_guests)),
  359. 'U_SORT_LOCATION' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sk=c&amp;sd=' . (($sort_key == 'c' && $sort_dir == 'a') ? 'd' : 'a') . '&amp;sg=' . ((int) $show_guests)),
  360. 'U_SWITCH_GUEST_DISPLAY' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sg=' . ((int) !$show_guests)),
  361. 'L_SWITCH_GUEST_DISPLAY' => ($show_guests) ? $user->lang['HIDE_GUESTS'] : $user->lang['DISPLAY_GUESTS'],
  362. 'S_SWITCH_GUEST_DISPLAY' => ($config['load_online_guests']) ? true : false)
  363. );
  364. // We do not need to load the who is online box here. ;)
  365. $config['load_online'] = false;
  366. // Output the page
  367. page_header($user->lang['WHO_IS_ONLINE']);
  368. $template->set_filenames(array(
  369. 'body' => 'viewonline_body.html')
  370. );
  371. make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
  372. page_footer();
  373. ?>