PageRenderTime 62ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/pm_spy/root/includes/acp/acp_pm_spy.php

http://prekladyphpbbcz.googlecode.com/
PHP | 243 lines | 179 code | 45 blank | 19 comment | 15 complexity | 641e3e820d64cebdeb17b502e0df36d0 MD5 | raw file
Possible License(s): GPL-2.0, AGPL-1.0
  1. <?php
  2. /**
  3. *
  4. * @package acp_pm_spy
  5. * @version $Id: 1.0.0
  6. * @copyright (c) 2008 david63
  7. * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  8. *
  9. */
  10. /**
  11. * @ignore
  12. */
  13. if (!defined('IN_PHPBB'))
  14. {
  15. exit;
  16. }
  17. /**
  18. * @package acp
  19. */
  20. class acp_pm_spy
  21. {
  22. var $u_action;
  23. function main($id, $mode)
  24. {
  25. global $config, $db, $user, $template, $phpbb_root_path, $phpEx;
  26. // Start initial var setup
  27. $start = request_var('start', 0);
  28. $sort_key = request_var('sk', 'd');
  29. $sd = $sort_dir = request_var('sd', 'd');
  30. $delete = (!empty($_POST['delete'])) ? true : false;
  31. if ($delete)
  32. {
  33. $pm_spy_list = request_var('mark', array(''));
  34. // Restore the array to its correct format
  35. $pm_spy_list = str_replace('#', '"', $pm_spy_list);
  36. foreach ($pm_spy_list as $pm_msg_list)
  37. {
  38. $pm_list[] = unserialize($pm_msg_list);
  39. }
  40. if (!sizeof($pm_spy_list))
  41. {
  42. trigger_error('NO_PM_SELECTED');
  43. }
  44. if (!function_exists('delete_pm'))
  45. {
  46. include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
  47. }
  48. foreach ($pm_list as $row)
  49. {
  50. delete_pm($row['user_id'], $row['msg_ids'], $row['folder_id']);
  51. }
  52. add_log('admin', 'LOG_PM_SPY');
  53. }
  54. $sort_dir = ($sort_dir == 'd') ? ' DESC' : ' ASC';
  55. switch ($sort_key)
  56. {
  57. case 'b':
  58. $order_by = 'u.username_clean' . $sort_dir;
  59. $order_sql = ' AND t.user_id = u.user_id ';
  60. break;
  61. case 'd':
  62. $order_by = 'p.message_time' . $sort_dir;
  63. $order_sql = ' AND t.user_id = u.user_id ';
  64. break;
  65. case 'f':
  66. $order_by = 'u.username_clean' . $sort_dir;
  67. $order_sql = ' AND t.author_id = u.user_id ';
  68. break;
  69. case 'i':
  70. $order_by = 'p.author_ip' . $sort_dir. ', u.username_clean ASC';
  71. $order_sql = ' AND t.user_id = u.user_id ';
  72. break;
  73. case 'p':
  74. $order_by = 't.folder_id' . $sort_dir. ', u.username_clean ASC';
  75. $order_sql = ' AND t.user_id = u.user_id ';
  76. break;
  77. case 't':
  78. $order_by = 'to_username' . $sort_dir;
  79. $order_sql = ' AND t.user_id = u.user_id ';
  80. break;
  81. }
  82. // Get PM count for pagination
  83. $sql = 'SELECT COUNT(msg_id) AS total_pm
  84. FROM ' . PRIVMSGS_TO_TABLE;
  85. $result = $db->sql_query($sql);
  86. $total_pm = (int) $db->sql_fetchfield('total_pm');
  87. $db->sql_freeresult($result);
  88. if ($total_pm == 0)
  89. {
  90. trigger_error($user->lang['NO_PM_DATA']);
  91. }
  92. $this->tpl_name = 'acp_pm_spy';
  93. $this->page_title = 'ACP_PM_SPY';
  94. $pm_box_ary = array(
  95. PRIVMSGS_HOLD_BOX => $user->lang['PM_HOLDBOX'],
  96. PRIVMSGS_NO_BOX => $user->lang['PM_NOBOX'],
  97. PRIVMSGS_OUTBOX => $user->lang['PM_OUTBOX'],
  98. PRIVMSGS_SENTBOX => $user->lang['PM_SENTBOX'],
  99. PRIVMSGS_INBOX => $user->lang['PM_INBOX'],
  100. );
  101. $flags = (($config['auth_bbcode_pm']) ? OPTION_FLAG_BBCODE : 0) + (($config['auth_smilies_pm']) ? OPTION_FLAG_SMILIES : 0) + (($config['allow_post_links']) ? OPTION_FLAG_LINKS : 0);
  102. $sql = 'SELECT p.msg_id, p.message_subject, p.message_text, p.bbcode_uid, p.bbcode_bitfield, p.message_time, p.bcc_address, p.to_address, p.author_ip, t.user_id, t.author_id, t.folder_id, LOWER(u.username) AS to_username
  103. FROM ' . PRIVMSGS_TABLE . ' p, ' . PRIVMSGS_TO_TABLE . ' t, ' . USERS_TABLE . ' u
  104. WHERE p.msg_id = t.msg_id ' .
  105. $order_sql . '
  106. ORDER BY ' . $order_by;
  107. $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
  108. while ($row = $db->sql_fetchrow($result))
  109. {
  110. $template->assign_block_vars('pm_row', array(
  111. 'AUTHOR_IP' => $row['author_ip'],
  112. 'BCC' => ($row['bcc_address']) ? get_pm_user_data($row['user_id'], $row['author_id']) : '',
  113. 'DATE' => $user->format_date($row['message_time']),
  114. 'FOLDER' => ($row['folder_id'] > PRIVMSGS_INBOX) ? $user->lang['PM_SAVED'] : $pm_box_ary[$row['folder_id']],
  115. 'FROM' => get_pm_user_data($row['author_id']),
  116. 'IS_GROUP' => (strstr($row['to_address'], 'g')) ? 'G' : '',
  117. 'LAST_VISIT_FROM' => get_last_visit($row['author_id']),
  118. 'LAST_VISIT_TO' => ($row['to_address']) ? get_last_visit($row['user_id'], $row['author_id']) : '',
  119. // We have to replace " in this variable because the template system will not parse it.
  120. 'PM_ID' => str_replace('"', '#', serialize(array('msg_ids' => $row['msg_id'], 'user_id' => $row['user_id'], 'folder_id' => $row['folder_id']))),
  121. // Create a unique key for the js script
  122. 'PM_KEY' => $row['msg_id'] . $row['user_id'],
  123. 'PM_SUBJECT' => $row['message_subject'],
  124. 'PM_TEXT' => generate_text_for_display($row['message_text'], $row['bbcode_uid'], $row['bbcode_bitfield'], $flags),
  125. 'TO' => ($row['to_address']) ? get_pm_user_data($row['user_id'], $row['author_id']) : '',
  126. ));
  127. }
  128. $db->sql_freeresult($result);
  129. $sort_by_text = array('f' => $user->lang['SORT_FROM'], 't' => $user->lang['SORT_TO'], 'b' => $user->lang['SORT_BCC'], 'p' => $user->lang['SORT_PM_BOX'], 'i' => $user->lang['SORT_IP'], 'd' => $user->lang['SORT_DATE']);
  130. $limit_days = array();
  131. $s_sort_key = $s_limit_days = $s_sort_dir = $u_sort_param = '';
  132. gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sd, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
  133. $action = $this->u_action . '&amp;sk=' . $sort_key . '&amp;sd=' . $sd;
  134. $template->assign_vars(array(
  135. 'MESSAGE_COUNT' => $total_pm,
  136. 'PAGINATION' => generate_pagination($action, $total_pm, $config['topics_per_page'], $start, true),
  137. 'S_INSTALL_CHECK' => file_exists($phpbb_root_path . 'install_pm_spy.' . $phpEx),
  138. 'S_ON_PAGE' => on_page($total_pm, $config['topics_per_page'], $start),
  139. 'S_SORT_KEY' => $s_sort_key,
  140. 'S_SORT_DIR' => $s_sort_dir,
  141. 'U_ACTION' => $this->u_action . '&amp;action=delete',
  142. ));
  143. }
  144. }
  145. function get_last_visit($user_id, $author = 0)
  146. {
  147. global $db, $config, $user;
  148. if ($user_id == $author)
  149. {
  150. $last_visit = '';
  151. }
  152. else
  153. {
  154. $sql = 'SELECT session_user_id, MAX(session_time) AS session_time
  155. FROM ' . SESSIONS_TABLE . '
  156. WHERE session_time >= ' . (time() - $config['session_length']) . '
  157. AND ' . $db->sql_in_set('session_user_id', $user_id) . '
  158. GROUP BY session_user_id';
  159. $result = $db->sql_query($sql);
  160. $session_times = array();
  161. while ($row = $db->sql_fetchrow($result))
  162. {
  163. $session_times[$row['session_user_id']] = $row['session_time'];
  164. }
  165. $db->sql_freeresult($result);
  166. $sql = 'SELECT user_lastvisit
  167. FROM ' . USERS_TABLE . '
  168. WHERE ' . $db->sql_in_set('user_id', $user_id);
  169. $result = $db->sql_query($sql);
  170. while ($row = $db->sql_fetchrow($result))
  171. {
  172. $session_time = (!empty($session_times[$user_id])) ? $session_times[$user_id] : 0;
  173. $last_visit = (!empty($session_time)) ? $session_time : $row['user_lastvisit'];
  174. $last_visit = $user->format_date($last_visit);
  175. }
  176. $db->sql_freeresult($result);
  177. }
  178. return $last_visit;
  179. }
  180. function get_pm_user_data($pm_user, $author = 0)
  181. {
  182. global $db;
  183. if ($pm_user == $author)
  184. {
  185. $user_info = '';
  186. }
  187. else
  188. {
  189. $sql = 'SELECT username, user_colour
  190. FROM ' . USERS_TABLE . '
  191. WHERE ' . $db->sql_in_set('user_id', $pm_user);
  192. $result = $db->sql_query($sql);
  193. $row = $db->sql_fetchrow($result);
  194. $user_info = get_username_string('full',(int) $pm_user, $row['username'], $row['user_colour']);
  195. }
  196. return $user_info;
  197. }
  198. ?>