PageRenderTime 48ms CodeModel.GetById 12ms RepoModel.GetById 1ms app.codeStats 0ms

/viewonline.php

https://github.com/igorw-forks/icy_phoenix
PHP | 418 lines | 311 code | 44 blank | 63 comment | 63 complexity | 8fa83336a0c607f29e9752611bed4144 MD5 | raw file
Possible License(s): AGPL-1.0
  1. <?php
  2. /**
  3. *
  4. * @package Icy Phoenix
  5. * @version $Id$
  6. * @copyright (c) 2008 Icy Phoenix
  7. * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  8. *
  9. */
  10. /**
  11. *
  12. * @Icy Phoenix is based on phpBB
  13. * @copyright (c) 2008 phpBB Group
  14. *
  15. */
  16. define('IN_ICYPHOENIX', true);
  17. if (!defined('IP_ROOT_PATH')) define('IP_ROOT_PATH', './');
  18. if (!defined('PHP_EXT')) define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1));
  19. include(IP_ROOT_PATH . 'common.' . PHP_EXT);
  20. // Mighty Gorgon - HTTP AGENTS - BEGIN
  21. include_once(IP_ROOT_PATH . 'includes/functions_mg_http.' . PHP_EXT);
  22. // Mighty Gorgon - HTTP AGENTS - END
  23. include_once(IP_ROOT_PATH . 'includes/functions_mg_online.' . PHP_EXT);
  24. // Start session management
  25. $userdata = session_pagestart($user_ip);
  26. init_userprefs($userdata);
  27. // End session management
  28. // Viewonline pagination... to be coded...
  29. /*
  30. $start = isset($_GET['start']) ? intval($_GET['start']) : 0;
  31. $start = ($start < 0) ? 0 : $start;
  32. $show_all = isset($_GET['show_all']) ? true : false;
  33. */
  34. $cms_page['page_id'] = 'viewonline';
  35. $cms_page['page_nav'] = (!empty($cms_config_layouts[$cms_page['page_id']]['page_nav']) ? true : false);
  36. $cms_page['global_blocks'] = (!empty($cms_config_layouts[$cms_page['page_id']]['global_blocks']) ? true : false);
  37. $cms_auth_level = (isset($cms_config_layouts[$cms_page['page_id']]['view']) ? $cms_config_layouts[$cms_page['page_id']]['view'] : AUTH_ALL);
  38. check_page_auth($cms_page['page_id'], $cms_auth_level);
  39. make_jumpbox(CMS_PAGE_VIEWFORUM);
  40. $template->assign_vars(array(
  41. // Start add - Fully integrated shoutbox MOD
  42. 'U_SHOUTBOX' => append_sid('shoutbox.' . PHP_EXT),
  43. 'L_SHOUTBOX' => $lang['Shoutbox'],
  44. 'U_SHOUTBOX_MAX' => append_sid('shoutbox_max.' . PHP_EXT),
  45. // End add - Fully integrated shoutbox MOD
  46. 'L_WHOSONLINE' => $lang['Who_is_Online'],
  47. // Start Advanced IP Tools Pack MOD
  48. 'L_WHOIS' => $lang['Whois'],
  49. 'L_IP' => $lang['IP'],
  50. 'L_BROWSER' => $lang['Browser'],
  51. // End Advanced IP Tools Pack MOD
  52. 'L_LAST_SEEN' => $lang['Last_Seen'],
  53. 'L_ONLINE_EXPLAIN' => $lang['Online_explain'],
  54. 'L_USERNAME' => $lang['Username'],
  55. 'L_FORUM_LOCATION' => $lang['Forum_Location'],
  56. 'L_LAST_UPDATE' => $lang['Last_updated']
  57. )
  58. );
  59. // Forum info
  60. $forum_types = array(FORUM_CAT, FORUM_POST, FORUM_LINK);
  61. $forums_array = get_forums_ids($forum_types, true, false);
  62. foreach ($forums_array as $forum)
  63. {
  64. $forum_data[$forum['forum_id']] = $forum['forum_name'];
  65. }
  66. // Get auth data
  67. $is_auth_ary = array();
  68. $is_auth_ary = auth(AUTH_READ, AUTH_LIST_ALL, $userdata);
  69. // Viewonline pagination... to be coded...
  70. /*
  71. if ($show_all)
  72. {
  73. $sql_limit = '';
  74. }
  75. else
  76. {
  77. $sql_limit = 'LIMIT ' . $start . ', ' . $config['topics_per_page'];
  78. }
  79. */
  80. // Get user list
  81. $sql = "SELECT u.user_id, u.username, u.user_active, u.user_color, u.user_allow_viewonline, u.user_level, s.session_logged_in, s.session_time, s.session_page, s.session_ip, s.session_user_agent
  82. FROM " . USERS_TABLE . " u, " . SESSIONS_TABLE . " s
  83. WHERE u.user_id = s.session_user_id
  84. AND s.session_time >= " . (time() - ONLINE_REFRESH) . "
  85. ORDER BY u.username ASC, s.session_ip ASC";
  86. $result = $db->sql_query($sql);
  87. $guest_users = 0;
  88. $registered_users = 0;
  89. $hidden_users = 0;
  90. $reg_counter = 0;
  91. $guest_counter = 0;
  92. $prev_user = 0;
  93. $prev_ip = '';
  94. while($row = $db->sql_fetchrow($result))
  95. {
  96. $view_online = false;
  97. $is_auth_view = false;
  98. $forum_id = false;
  99. $topic_id = false;
  100. // Mighty Gorgon - HTTP AGENTS - BEGIN
  101. $user_os = get_user_os($row['session_user_agent']);
  102. $user_browser = get_user_browser($row['session_user_agent']);
  103. // Mighty Gorgon - HTTP AGENTS - END
  104. if ($row['session_logged_in'])
  105. {
  106. $user_id = $row['user_id'];
  107. if ($user_id != $prev_user)
  108. {
  109. $username = colorize_username($row['user_id'], $row['username'], $row['user_color'], $row['user_active']);
  110. if (!$row['user_allow_viewonline'])
  111. {
  112. $view_online = (($userdata['user_level'] == ADMIN) || ($userdata['user_id'] == $user_id)) ? true : false;
  113. $hidden_users++;
  114. $username = '<i>' . $username . '</i>';
  115. }
  116. else
  117. {
  118. $view_online = true;
  119. $registered_users++;
  120. }
  121. $which_counter = 'reg_counter';
  122. $which_row = 'reg_user_row';
  123. $prev_user = $user_id;
  124. }
  125. }
  126. else
  127. {
  128. if ($row['session_ip'] != $prev_ip)
  129. {
  130. // MG BOTS Parsing - BEGIN
  131. $bot_name_tmp = bots_parse($row['session_ip'], $config['bots_color'], $row['session_user_agent']);
  132. if ($bot_name_tmp != false)
  133. {
  134. $username = $bot_name_tmp;
  135. }
  136. else
  137. {
  138. $username = '<b>' . $lang['Guest'] . '</b>';
  139. }
  140. // MG BOTS Parsing - END
  141. $view_online = true;
  142. $guest_users++;
  143. $which_counter = 'guest_counter';
  144. $which_row = 'guest_user_row';
  145. }
  146. }
  147. $prev_ip = $row['session_ip'];
  148. if ($view_online)
  149. {
  150. if ((strpos($row['session_page'], CMS_PAGE_VIEWFORUM) !== false) || (strpos($row['session_page'], CMS_PAGE_VIEWTOPIC) !== false))
  151. {
  152. $results = array();
  153. ereg('_f_=([0-9]*)x', $row['session_page'], $results);
  154. if (!empty($results[0]))
  155. {
  156. $forum_id = str_replace(array('_f_=', 'x'), array('', ''), $results[0]);
  157. $is_auth_view = ($is_auth_ary[$forum_id]['auth_read'] != false) ? true : false;
  158. }
  159. $results = array();
  160. ereg('_t_=([0-9]*)x', $row['session_page'], $results);
  161. if (!empty($results[0]))
  162. {
  163. $topic_id = str_replace(array('_t_=', 'x'), array('', ''), $results[0]);
  164. }
  165. }
  166. if (!empty($topic_id))
  167. {
  168. // Topic info
  169. $sql_tt = "SELECT topic_title, forum_id FROM " . TOPICS_TABLE . " WHERE topic_id='" . $topic_id . "'";
  170. $result_tt = $db->sql_query($sql_tt);
  171. $topic_title = $db->sql_fetchrow($result_tt);
  172. if ($is_auth_ary[$topic_title['forum_id']]['auth_read'] != false)
  173. {
  174. $location['lang'] = $forum_data[$topic_title['forum_id']] . '&nbsp;&raquo;&nbsp;' . $topic_title['topic_title'];
  175. $location['url'] = CMS_PAGE_VIEWTOPIC . '?' . POST_FORUM_URL . '=' . $topic_title['forum_id'] . '&amp;' . POST_TOPIC_URL . '=' . $topic_id;
  176. }
  177. else
  178. {
  179. $location['lang'] = $lang['Forum_index'];
  180. $location['url'] = CMS_PAGE_FORUM;
  181. }
  182. }
  183. else
  184. {
  185. if (!empty($forum_id) && $is_auth_view)
  186. //if (!empty($forum_id))
  187. {
  188. $location['lang'] = $forum_data[$forum_id];
  189. $location['url'] = CMS_PAGE_VIEWFORUM . '?' . POST_FORUM_URL . '=' . $forum_id;
  190. }
  191. else
  192. {
  193. $location = get_online_page($row['session_page']);
  194. }
  195. }
  196. $location['url'] = append_sid(IP_ROOT_PATH . $location['url']);
  197. $row_class = ($$which_counter % 2) ? $theme['td_class1'] : $theme['td_class2'];
  198. // Start Advanced IP Tools Pack MOD
  199. $mode = htmlspecialchars($_GET['mode']);
  200. if ((($userdata['user_level'] == ADMIN) || ($userdata['user_level'] == MOD)) && $mode == 'lookup' && isset($_GET['ip']) && (decode_ip($row['session_ip']) == $_GET['ip']))
  201. {
  202. $ip = gethostbyaddr(decode_ip($row['session_ip']));
  203. }
  204. else
  205. {
  206. $ip = decode_ip($row['session_ip']);
  207. $mode = 'ip';
  208. }
  209. // End Advanced IP Tools Pack MOD
  210. $template->assign_block_vars("$which_row", array(
  211. // Start Advanced IP Tools Pack MOD
  212. 'IP' => htmlspecialchars($ip),
  213. 'USER_AGENT' => htmlspecialchars($row['session_user_agent']) . '<br />' . $row['session_page'],
  214. 'U_HOSTNAME_LOOKUP' => ($mode != 'lookup') ? append_sid(CMS_PAGE_VIEWONLINE . '?mode=lookup&amp;ip=' . decode_ip($row['session_ip'])) : append_sid(CMS_PAGE_VIEWONLINE . '?mode=ip&amp;ip=' . decode_ip($row['session_ip'])),
  215. 'U_WHOIS' => 'http://whois.sc/' . decode_ip($row['session_ip']),
  216. // End Advanced IP Tools Pack MOD
  217. 'ROW_CLASS' => $row_class,
  218. 'USERNAME' => $username,
  219. 'LASTUPDATE' => create_date_ip($config['default_dateformat'], $row['session_time'], $config['board_timezone']),
  220. 'FORUM_LOCATION' => $location['lang'],
  221. // Mighty Gorgon - HTTP AGENTS - BEGIN
  222. 'USER_OS_IMG' => $user_os['img'],
  223. 'USER_BROWSER_IMG' => $user_browser['img'],
  224. // Mighty Gorgon - HTTP AGENTS - END
  225. 'U_USER_PROFILE' => append_sid(CMS_PAGE_PROFILE . '?mode=viewprofile&amp;' . POST_USERS_URL . '=' . $user_id),
  226. 'U_FORUM_LOCATION' => $location['url']
  227. )
  228. );
  229. // Start Advanced IP Tools Pack MOD
  230. if (($userdata['user_level'] == ADMIN) || ($userdata['user_level'] == MOD))
  231. {
  232. $template->assign_block_vars($which_row . '.switch_user_admin_or_mod', array());
  233. }
  234. // End Advanced IP Tools Pack MOD
  235. $$which_counter++;
  236. }
  237. }
  238. if($registered_users == 0)
  239. {
  240. $l_r_user_s = $lang['Reg_users_zero_online'];
  241. }
  242. elseif($registered_users == 1)
  243. {
  244. $l_r_user_s = $lang['Reg_user_online'];
  245. }
  246. else
  247. {
  248. $l_r_user_s = $lang['Reg_users_online'];
  249. }
  250. if($hidden_users == 0)
  251. {
  252. $l_h_user_s = $lang['Hidden_users_zero_online'];
  253. }
  254. elseif($hidden_users == 1)
  255. {
  256. $l_h_user_s = $lang['Hidden_user_online'];
  257. }
  258. else
  259. {
  260. $l_h_user_s = $lang['Hidden_users_online'];
  261. }
  262. if($guest_users == 0)
  263. {
  264. $l_g_user_s = $lang['Guest_users_zero_online'];
  265. }
  266. elseif($guest_users == 1)
  267. {
  268. $l_g_user_s = $lang['Guest_user_online'];
  269. }
  270. else
  271. {
  272. $l_g_user_s = $lang['Guest_users_online'];
  273. }
  274. $template->assign_vars(array(
  275. 'TOTAL_REGISTERED_USERS_ONLINE' => sprintf($l_r_user_s, $registered_users) . sprintf($l_h_user_s, $hidden_users),
  276. 'TOTAL_GUEST_USERS_ONLINE' => sprintf($l_g_user_s, $guest_users)
  277. )
  278. );
  279. if ($registered_users + $hidden_users == 0)
  280. {
  281. $template->assign_vars(array(
  282. 'L_NO_REGISTERED_USERS_BROWSING' => $lang['No_users_browsing']
  283. )
  284. );
  285. }
  286. if ($guest_users == 0)
  287. {
  288. $template->assign_vars(array(
  289. 'L_NO_GUESTS_BROWSING' => $lang['No_users_browsing']
  290. )
  291. );
  292. }
  293. if ($config['online_shoutbox'] == 1)
  294. {
  295. $template->assign_vars(array('S_SHOUTBOX' => true));
  296. }
  297. // Recent Topics - BEGIN
  298. if ($config['online_last_msgs'] == 1)
  299. {
  300. $template->assign_block_vars('switch_show_recent', array());
  301. $except_forums = build_exclusion_forums_list();
  302. if(!empty($config['last_msgs_x']))
  303. {
  304. $except_forums .= ',' . $config['last_msgs_x'];
  305. }
  306. $except_forums = str_replace(' ', '', $except_forums);
  307. $sql = "SELECT t.topic_id, t.topic_title, t.topic_last_post_id, t.forum_id, p.post_id, p.poster_id, p.post_time, u.user_id, u.username, u.user_active, u.user_color, f.forum_name
  308. FROM " . TOPICS_TABLE . " AS t, " . POSTS_TABLE . " AS p, " . USERS_TABLE . " AS u, " . FORUMS_TABLE . " AS f
  309. WHERE t.forum_id NOT IN (" . $except_forums . ")
  310. AND t.topic_status <> 2
  311. AND p.post_id = t.topic_last_post_id
  312. AND p.poster_id = u.user_id
  313. AND f.forum_id = t.forum_id
  314. ORDER BY p.post_id DESC
  315. LIMIT " . intval($config['last_msgs_n']);
  316. $result = $db->sql_query($sql);
  317. $number_recent_topics = $db->sql_numrows($result);
  318. $recent_topic_row = array();
  319. while($row = $db->sql_fetchrow($result))
  320. {
  321. $recent_topic_row[] = $row;
  322. }
  323. for($i = 0; $i < $number_recent_topics; $i++)
  324. {
  325. $template->assign_block_vars('switch_show_recent.recent_topic_row', array(
  326. 'U_FORUM' => append_sid(CMS_PAGE_VIEWFORUM . '?' . POST_FORUM_URL . '=' . $recent_topic_row[$i]['forum_id']),
  327. 'L_FORUM' => $recent_topic_row[$i]['forum_name'],
  328. 'U_TITLE' => append_sid(CMS_PAGE_VIEWTOPIC . '?' . POST_POST_URL . '=' . $recent_topic_row[$i]['post_id']) . '#p' .$recent_topic_row[$i]['post_id'],
  329. 'L_TITLE' => $recent_topic_row[$i]['topic_title'],
  330. 'U_POSTER' => colorize_username($recent_topic_row[$i]['user_id'], $recent_topic_row[$i]['username'], $recent_topic_row[$i]['user_color'], $recent_topic_row[$i]['user_active']),
  331. 'S_POSTER' => $recent_topic_row[$i]['username'],
  332. 'S_POSTTIME' => create_date_ip($config['default_dateformat'], $recent_topic_row[$i]['post_time'], $config['board_timezone'])
  333. )
  334. );
  335. }
  336. // Last Seen - BEGIN
  337. //$sql = "SELECT username, user_id, user_lastlogon, user_level, user_allow_viewonline FROM " . USERS_TABLE . " WHERE user_id > 0 ORDER BY user_lastlogon DESC LIMIT 10";
  338. $sql = "SELECT username, user_id, user_active, user_color, user_lastlogon, user_level, user_allow_viewonline
  339. FROM " . USERS_TABLE . "
  340. WHERE user_id > 0 ORDER BY user_lastlogon DESC
  341. LIMIT " . intval($config['last_msgs_n']);
  342. $result = $db->sql_query($sql);
  343. $number_last_seen = $db->sql_numrows($result);
  344. $last_seen_row = array();
  345. while($row = $db->sql_fetchrow($result)) { $last_seen_row[] = $row; }
  346. for($i = 0; $i < $number_last_seen; $i++)
  347. {
  348. $username = colorize_username($last_seen_row[$i]['user_id'], $last_seen_row[$i]['username'], $last_seen_row[$i]['user_color'], $last_seen_row[$i]['user_active']);
  349. $username_text = $last_seen_row[$i]['username'];
  350. if($last_seen_row[$i]['user_allow_viewonline'] != 1)
  351. {
  352. if($userdata['user_level'] == ADMIN)
  353. {
  354. $username = '<i>' . $username . '</i>';
  355. }
  356. else
  357. {
  358. $username = '<i>' . $lang['Hidde_last_logon'] . '</i>';
  359. }
  360. }
  361. $template->assign_block_vars('switch_show_recent.last_seen_row', array(
  362. 'U_LSEEN_LINK' => ($last_seen_row[$i]['user_allow_viewonline']) ? $username : (($userdata[user_level] == ADMIN) ? '<i>' . $username . '</i>' : $username),
  363. 'L_LSEEN_USERNAME' => $username_text,
  364. 'L_LSEEN_TIME' => create_date_ip($config['default_dateformat'], $last_seen_row[$i]['user_lastlogon'], $config['board_timezone']),
  365. //'L_LSEEN_TIME' => gmdate("d.m.Y - H:i", $last_seen_row[$i]['user_lastlogon']),
  366. )
  367. );
  368. }
  369. // Last Seen - END
  370. }
  371. // Recent Topics - END
  372. full_page_generation('viewonline_body.tpl', $lang['Who_is_Online'], '', '');
  373. ?>