PageRenderTime 26ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/topic_view_users.php

http://github.com/MightyGorgon/icy_phoenix
PHP | 337 lines | 281 code | 40 blank | 16 comment | 35 complexity | 58ee1fb7378c4fd496a5421010740f7f 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. define('IN_ICYPHOENIX', true);
  11. if (!defined('IP_ROOT_PATH')) define('IP_ROOT_PATH', './');
  12. if (!defined('PHP_EXT')) define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1));
  13. include(IP_ROOT_PATH . 'common.' . PHP_EXT);
  14. include_once(IP_ROOT_PATH . 'includes/functions_users.' . PHP_EXT);
  15. // Start session management
  16. $user->session_begin();
  17. $auth->acl($user->data);
  18. $user->setup();
  19. // End session management
  20. $like = request_var('like', '');
  21. if ($user->data['is_bot'] || (empty($like) && !empty($config['disable_topic_view'])) || (!empty($like) && (!empty($config['disable_likes_posts']) || !$user->data['session_logged_in'])))
  22. {
  23. message_die(GENERAL_MESSAGE, $lang['Feature_Disabled']);
  24. }
  25. include(IP_ROOT_PATH . 'includes/class_form.' . PHP_EXT);
  26. $class_form = new class_form();
  27. @include_once(IP_ROOT_PATH . 'includes/class_topics.' . PHP_EXT);
  28. $class_topics = new class_topics();
  29. // Init common vars: forum_id, topic_id, post_id, etc.
  30. $class_topics->var_init(true);
  31. if ((empty($like) && empty($topic_id)) || (!empty($like) && empty($post_id)))
  32. {
  33. if (!defined('STATUS_404')) define('STATUS_404', true);
  34. message_die(GENERAL_MESSAGE, 'NO_TOPIC');
  35. }
  36. if (!$user->data['session_logged_in'])
  37. {
  38. redirect(append_sid(CMS_PAGE_LOGIN . '?redirect=topic_view_users.' . PHP_EXT . '&' . POST_TOPIC_URL . '=' . $topic_id, true));
  39. }
  40. // Find the forum where this topic is located
  41. if (!empty($like))
  42. {
  43. $sql = "SELECT f.*, t.*, p.*
  44. FROM " . FORUMS_TABLE . " f, " . TOPICS_TABLE . " t, " . POSTS_TABLE . " p
  45. WHERE p.post_id = " . $post_id . "
  46. AND t.topic_id = p.topic_id
  47. AND f.forum_id = t.forum_id";
  48. }
  49. else
  50. {
  51. $sql = "SELECT f.*, t.*
  52. FROM " . FORUMS_TABLE . " f, " . TOPICS_TABLE . " t
  53. WHERE t.topic_id = " . $topic_id . "
  54. AND f.forum_id = t.forum_id";
  55. }
  56. $result = $db->sql_query($sql);
  57. $forum_topic_data = $db->sql_fetchrow($result);
  58. $db->sql_freeresult($result);
  59. if (empty($forum_topic_data))
  60. {
  61. if (!defined('STATUS_404')) define('STATUS_404', true);
  62. message_die(GENERAL_MESSAGE, 'NO_TOPIC');
  63. }
  64. $forum_id = $forum_topic_data['forum_id'];
  65. $is_auth = array();
  66. $is_auth = auth(AUTH_ALL, $forum_id, $user->data, $forum_topic_data);
  67. if (!$is_auth['auth_read'] || !$is_auth['auth_view'])
  68. {
  69. message_die(GENERAL_MESSAGE, $lang['Not_Auth_View']);
  70. }
  71. // If you want to disallow view to normal users decomment this block
  72. //if (empty($like) && ($user->data['user_level'] != ADMIN) && ($user->data['user_level'] != MOD))
  73. if (empty($like) && ($user->data['user_level'] != ADMIN))
  74. {
  75. message_die(GENERAL_MESSAGE, $lang['Not_Auth_View']);
  76. }
  77. /*
  78. */
  79. $start = request_var('start', 0);
  80. $start = ($start < 0) ? 0 : $start;
  81. $select_name = 'mode';
  82. $mode_types = array('topic_time', 'username', 'email', 'joindate', 'topic_count', 'website', 'topten');
  83. $mode_types_text = array($lang['Topic_time'], $lang['SORT_USERNAME'], $lang['SORT_EMAIL'], $lang['SORT_JOINED'], $lang['Topic_count'], $lang['SORT_WEBSITE'], $lang['SORT_TOP_TEN']);
  84. $mode = request_var('mode', $mode_types[0]);
  85. $mode = check_var_value($mode, $mode_types);
  86. $default = $mode;
  87. $select_js = '';
  88. $select_sort_mode = $class_form->build_select_box($select_name, $default, $mode_types, $mode_types_text, $select_js);
  89. $select_name = 'order';
  90. $sort_order_select_array = array('ASC', 'DESC');
  91. $sort_order_select_lang_array = array($lang['Sort_Ascending'], $lang['Sort_Descending']);
  92. $sort_order = request_var('order', 'DESC');
  93. $sort_order = check_var_value($sort_order, $sort_order_select_array);
  94. $default = $sort_order;
  95. $select_js = '';
  96. $select_sort_order = $class_form->build_select_box($select_name, $default, $sort_order_select_array, $sort_order_select_lang_array, $select_js);
  97. $base_url = IP_ROOT_PATH . 'topic_view_users.' . PHP_EXT . '?' . (!empty($like) ? ('like=1&amp;' . POST_POST_URL . '=' . $post_id) : (POST_TOPIC_URL . '=' . $topic_id));
  98. $base_url_full = $base_url . '&amp;mode=' . $mode . '&amp;order=' . $sort_order;
  99. switch($mode)
  100. {
  101. case 'joined':
  102. $order_by = "u.user_regdate";
  103. break;
  104. case 'username':
  105. $order_by = "u.username";
  106. break;
  107. case 'topic_count':
  108. $order_by = !empty($like) ? "u.user_posts" : "tv.view_count";
  109. break;
  110. case 'topic_time':
  111. $order_by = !empty($like) ? "pl.like_time" : "tv.view_time";
  112. break;
  113. case 'email':
  114. $order_by = "u.user_email";
  115. break;
  116. case 'website':
  117. $order_by = "u.user_website";
  118. break;
  119. case 'topten':
  120. $order_by = "u.user_posts $sort_order LIMIT 10";
  121. break;
  122. default:
  123. $order_by = !empty($like) ? "pl.like_time" : "u.user_regdate";
  124. break;
  125. }
  126. $order_by = $order_by . (($mode != 'topten') ? (' ' . $sort_order . ' LIMIT ' . $start . ', ' . $config['topics_per_page']) : '');
  127. if ($user->data['user_level'] == ADMIN)
  128. {
  129. $sql_hidden = '';
  130. }
  131. else
  132. {
  133. $sql_hidden = ' AND u.user_allow_viewonline = \'1\'';
  134. }
  135. if (!empty($like))
  136. {
  137. $sql = "SELECT u.username, u.user_id, u.user_active, u.user_color, u.user_level, u.user_allow_viewemail, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_msnm, u.user_skype, u.user_avatar, u.user_avatar_type, u.user_allowavatar, u.user_from, u.user_from_flag, u.user_rank, u.user_rank2, u.user_rank3, u.user_rank4, u.user_rank5, u.user_birthday, u.user_gender, u.user_allow_viewonline, u.user_lastvisit, u.user_session_time, u.user_style, u.user_lang, pl.like_time
  138. FROM " . USERS_TABLE . " u, " . POSTS_LIKES_TABLE . " pl
  139. WHERE u.user_id = pl.user_id
  140. AND pl.post_id = " . $post_id . "
  141. " . $sql_hidden . "
  142. ORDER BY $order_by";
  143. }
  144. else
  145. {
  146. $sql = "SELECT u.username, u.user_id, u.user_active, u.user_color, u.user_level, u.user_allow_viewemail, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_msnm, u.user_skype, u.user_avatar, u.user_avatar_type, u.user_allowavatar, u.user_from, u.user_from_flag, u.user_rank, u.user_rank2, u.user_rank3, u.user_rank4, u.user_rank5, u.user_birthday, u.user_gender, u.user_allow_viewonline, u.user_lastvisit, u.user_session_time, u.user_style, u.user_lang, tv.view_time, tv.view_count
  147. FROM " . USERS_TABLE . " u, " . TOPIC_VIEW_TABLE . " tv
  148. WHERE u.user_id = tv.user_id
  149. AND tv.topic_id = " . $topic_id . "
  150. " . $sql_hidden . "
  151. GROUP BY tv.user_id
  152. ORDER BY $order_by";
  153. }
  154. $result = $db->sql_query($sql);
  155. $i = 0;
  156. while ($row = $db->sql_fetchrow($result))
  157. {
  158. $user_id = $row['user_id'];
  159. $username = colorize_username($row['user_id'], $row['username'], $row['user_color'], $row['user_active']);
  160. $user_info = array();
  161. $user_info = generate_user_info($row);
  162. foreach ($user_info as $k => $v)
  163. {
  164. ${$k} = $v;
  165. }
  166. if (!empty($like))
  167. {
  168. $topic_time = ($row['like_time']) ? create_date($config['default_dateformat'], $row['like_time'], $config['board_timezone']) : $lang['Never_last_logon'];
  169. $view_count = '&nbsp;';
  170. }
  171. else
  172. {
  173. $topic_time = ($row['view_time']) ? create_date($config['default_dateformat'], $row['view_time'], $config['board_timezone']) : $lang['Never_last_logon'];
  174. $view_count = ($row['view_count']) ? $row['view_count'] : '&nbsp;';
  175. }
  176. $poster_avatar = $user_info['avatar'];
  177. $row_class = (!($i % 2)) ? $theme['td_class1'] : $theme['td_class2'];
  178. $template->assign_block_vars('memberrow', array(
  179. 'ROW_NUMBER' => $i + (intval($_GET['start']) + 1),
  180. 'ROW_CLASS' => $row_class,
  181. 'USERNAME' => ($user_id == ANONYMOUS) ? $lang['Guest'] : $username,
  182. 'LAST_VIEWED' => $topic_time,
  183. 'VIEWS_COUNT' => $view_count,
  184. 'FROM' => $user_info['from'],
  185. 'JOINED' => $user_info['joined'],
  186. 'POSTS' => $user_info['posts'],
  187. 'AVATAR_IMG' => $user_info['avatar'],
  188. 'GENDER' => $user_info['gender'],
  189. 'PROFILE_URL' => $user_info['profile_url'],
  190. 'PROFILE_IMG' => $user_info['profile_img'],
  191. 'PROFILE' => $user_info['profile'],
  192. 'PM_URL' => $user_info['pm_url'],
  193. 'PM_IMG' => $user_info['pm_img'],
  194. 'PM' => $user_info['pm'],
  195. 'SEARCH_URL' => $user_info['search_url'],
  196. 'SEARCH_IMG' => $user_info['search_img'],
  197. 'SEARCH' => $user_info['search'],
  198. 'IP_URL' => $user_info['ip_url'],
  199. 'IP_IMG' => $user_info['ip_img'],
  200. 'IP' => $user_info['ip'],
  201. 'EMAIL_URL' => $user_info['email_url'],
  202. 'EMAIL_IMG' => $user_info['email_img'],
  203. 'EMAIL' => $user_info['email'],
  204. 'WWW_URL' => $user_info['www_url'],
  205. 'WWW_IMG' => $user_info['www_img'],
  206. 'WWW' => $user_info['www'],
  207. 'AIM_URL' => $user_info['aim_url'],
  208. 'AIM_IMG' => $user_info['aim_img'],
  209. 'AIM' => $user_info['aim'],
  210. 'ICQ_STATUS_IMG' => $user_info['icq_status_img'],
  211. 'ICQ_URL' => $user_info['icq_url'],
  212. 'ICQ_IMG' => $user_info['icq_img'],
  213. 'ICQ' => $user_info['icq'],
  214. 'MSN_URL' => $user_info['msn_url'],
  215. 'MSN_IMG' => $user_info['msn_img'],
  216. 'MSN' => $user_info['msn'],
  217. 'SKYPE_URL' => $user_info['skype_url'],
  218. 'SKYPE_IMG' => $user_info['skype_img'],
  219. 'SKYPE' => $user_info['skype'],
  220. 'YIM_URL' => $user_info['yahoo_url'],
  221. 'YIM_IMG' => $user_info['yahoo_img'],
  222. 'YIM' => $user_info['yahoo'],
  223. 'ONLINE_STATUS_URL' => $user_info['online_status_url'],
  224. 'ONLINE_STATUS_CLASS' => $user_info['online_status_class'],
  225. 'ONLINE_STATUS_IMG' => $user_info['online_status_img'],
  226. 'ONLINE_STATUS' => $user_info['online_status'],
  227. 'L_ONLINE_STATUS' => $user_info['online_status_lang'],
  228. )
  229. );
  230. $i++;
  231. }
  232. if (($mode != 'topten') || ($config['topics_per_page'] < 10))
  233. {
  234. if (!empty($like))
  235. {
  236. $sql = "SELECT count(*) AS total
  237. FROM " . POSTS_LIKES_TABLE . "
  238. WHERE post_id = " . $post_id;
  239. }
  240. else
  241. {
  242. $sql = "SELECT count(*) AS total
  243. FROM " . TOPIC_VIEW_TABLE . "
  244. WHERE topic_id = " . $topic_id;
  245. }
  246. $result = $db->sql_query($sql);
  247. if ($total = $db->sql_fetchrow($result))
  248. {
  249. $total_members = $total['total'];
  250. $pagination = generate_pagination($base_url_full, $total_members, $config['topics_per_page'], $start);
  251. }
  252. }
  253. else
  254. {
  255. $pagination = '&nbsp;';
  256. $total_members = 10;
  257. }
  258. make_jumpbox(CMS_PAGE_VIEWFORUM);
  259. $page_title = !empty($like) ? $lang['LIKE_RECAP'] : $lang['who_viewed'];
  260. $template->assign_vars(array(
  261. 'L_PAGE_TITLE' => $page_title,
  262. 'L_SELECT_SORT_METHOD' => $lang['Select_sort_method'],
  263. 'L_EMAIL' => $lang['Email'],
  264. 'L_WEBSITE' => $lang['Website'],
  265. 'L_ONLINE_STATUS' => $lang['Online_status'],
  266. 'L_ORDER' => $lang['Order'],
  267. 'L_SORT' => $lang['Sort'],
  268. 'L_SUBMIT' => $lang['Sort'],
  269. 'L_PM' => $lang['Private_Message'],
  270. 'L_USER_PROFILE' => $lang['Profile'],
  271. 'L_EMAIL' => $lang['Email'],
  272. 'L_CONTACTS' => $lang['User_Contacts'],
  273. 'L_ONLINE_STATUS' => $lang['Online_status'],
  274. 'L_USER_WWW' => $lang['Website'],
  275. 'L_USER_EMAIL' => $lang['Send_Email'],
  276. 'L_USER_PROFILE' => $lang['Profile'],
  277. 'L_VIEWS_COUNT' => $lang['Topic_count'],
  278. 'L_LAST_VIEWED' => !empty($like) ? $lang['LIKE_TIME'] : $lang['Topic_time'],
  279. 'L_FROM' => $lang['Location'],
  280. 'L_JOINED' => $lang['Joined'],
  281. 'S_POSTS_LIKES' => !empty($like) ? true : false,
  282. 'S_MODE_SELECT' => $select_sort_mode,
  283. 'S_ORDER_SELECT' => $select_sort_order,
  284. 'S_MODE_ACTION' => append_sid($base_url),
  285. 'CLOSE_WINDOW' => $lang['Close_window'],
  286. 'PAGINATION' => $pagination,
  287. 'PAGE_NUMBER' => sprintf($lang['Page_of'], (floor($start / $config['topics_per_page']) + 1), ceil($total_members / $config['topics_per_page'])),
  288. 'L_GOTO_PAGE' => $lang['Goto_page']
  289. )
  290. );
  291. if (!empty($like))
  292. {
  293. $gen_simple_header = true;
  294. $template->assign_var('S_POPUP', true);
  295. }
  296. full_page_generation('whoviewed_body.tpl', $page_title, '', '');
  297. ?>