Просмотр файла pages/mail.php

Размер файла: 9.44Kb
  1. <?php
  2. include '../engine/includes/start.php';
  3. if (!$user_id)
  4. Core::stop('/index.php');
  5. /*
  6. * By Denis27
  7. */
  8.  
  9. switch ($act)
  10. {
  11. case 'ajax':
  12. header('Content-Type: text/xml');
  13. ?>
  14. <response>
  15. <new_mail><?=$sql->query('SELECT sum(`unread`) FROM `mail_contacts` WHERE `user_id` = ' . $user_id)->result()?></new_mail>
  16. </response>
  17. <?
  18. exit;
  19. break;
  20. /*
  21. ---------------------------------
  22. Переписка с пользователем
  23. ---------------------------------
  24. */
  25. case 'mail':
  26. if (!$id)
  27. Core::stop('?');
  28. Core::get(array('page.class', 'text.class'), 'classes');
  29. if ($sql->query('SELECT COUNT(*) FROM `user` WHERE `id` = '.$id)->result() > 0)
  30. {
  31. $contact = Core::get_user($id);
  32. $sql->query('UPDATE `mail_contacts` SET `unread` = 0 WHERE `user_id` = '.$user_id.' AND `id_cont` = '.$id);
  33. $set['title'] = 'Переписка с ' . $contact['nick'];
  34. include incDir . 'head.php';
  35. /* Отправка сообщения */
  36. if (isset($_POST['add_mail'])) {
  37. $text = my_esc($_POST['text'], 'true');
  38. if (empty($_POST['text']) || mb_strlen($_POST['text'], 'UTF-8') <= 1) {
  39. Core::msg_show('Сообщение слишком короткое');
  40. } elseif (mb_strlen($_POST['text'], 'UTF-8') > 1024) {
  41. Core::msg_show('Сообщение превышает 1024 символа');
  42. } elseif ($id == $user_id) {
  43. Core::msg_show('Нельзя отправлять сообщения самому себе');
  44. } else {
  45. $sql->query("INSERT INTO `mail` (`author`, `user`, `time`, `text`) VALUES ('$user_id', '$id', '$time', '$text')");
  46.  
  47. if ($sql->query("SELECT COUNT(*) FROM `mail_contacts` WHERE `user_id` = '$user_id' AND `id_cont` = '$id'")->result() == 0)
  48. $sql->query('INSERT INTO `mail_contacts` (`user_id`, `id_cont`, `outbox`) VALUES (' . $user_id . ', ' . $id . ', "1")');
  49. else
  50. $sql->query('UPDATE `mail_contacts` SET `outbox` = `outbox`+1 WHERE `user_id` = ' . $user_id . ' AND `id_cont` = '. $id);
  51.  
  52. if ($sql->query("SELECT COUNT(*) FROM `mail_contacts` WHERE `user_id` = '". $id ."' AND `id_cont` = '" . $user_id . "'")->result() == 0)
  53. $sql->query('INSERT INTO `mail_contacts` (`user_id`, `id_cont`, `inbox`, `unread`) VALUES (' . $id . ', ' . $user_id . ', "1", "1")');
  54. else
  55. $sql->query('UPDATE `mail_contacts` SET `inbox` = `inbox`+1, `unread` = `unread`+1 WHERE `user_id` = ' . $id . ' AND `id_cont` = '. $user_id);
  56.  
  57. Core::msg_show('Сообщение успешно отправлено', 'msg');
  58. unset($text);
  59. }
  60. }
  61. ?>
  62. <form action="?act=<?=$act . '&amp;id=' .$id?>" method="POST">
  63. Сообщение:<br />
  64. <textarea name="text"><? echo !empty($text) ? $text : null ?></textarea><br />
  65. <input type="submit" name="add_mail"/>
  66. </form>
  67. <?
  68. $count = $sql->query("SELECT COUNT(*) FROM `mail` WHERE `author` = '$user_id' AND `user` = '$id' OR `author` = '$id' AND `user` = '$user_id'")->result();
  69.  
  70. if ($count > 0) {
  71. $sql->query('UPDATE `mail` SET `no` = "1" WHERE `author` = ' . $id . ' AND `user` = ' . $user_id);
  72. $page = new page($count, $set['p_str']);
  73. $i = 1;
  74. $sql->query("SELECT * FROM `mail` WHERE `author` = '$user_id' AND `user` = '$id' OR `author` = '$id' AND `user` = '$user_id' order by `id` DESC LIMIT " . $page->limit());
  75. while ($mail = $sql->fetch())
  76. {
  77. echo
  78. '<div class="'.($i++ % 2 ? 'p_m' : 'p_t').'">' .
  79. Core::user_show($mail['author'] == $id ? $contact : $user,
  80. array('post' => text::output($mail['text']), 'status' => $mail['time'], 'is_time' => true)) .
  81. (empty($mail['no']) ?'<span style="color:#FF0000;float:right;">Не прочитанно</span>' : null) .
  82. '</div>';
  83. }
  84. $page->display('?act=mail&amp;id=' . $id . '&amp;');
  85. unset($text, $contact, $page, $mail, $count);
  86. $sql->free();
  87. } else
  88. Core::msg_show('Переписка пуста');
  89. } else
  90. Core::msg_show('Пользователь не найден');
  91. echo '<a href="?"><div class="menu_razd">Список контактов</div></a>';
  92. break;
  93.  
  94.  
  95.  
  96.  
  97. /*
  98. ---------------------------------
  99. Написание сообщения
  100. ---------------------------------
  101. */
  102. case 'add_mail':
  103. $set['title'] = 'Написать сообщение';
  104. include H.'engine/includes/head.php';
  105. if (isset($_POST['add'])) {
  106. $_SESSION['login_mail'] = my_esc($_POST['login'], 'true');
  107. $_SESSION['text_mail'] = my_esc($_POST['text'], 'true');
  108. $login_mail = my_esc($_POST['login'],'true');
  109. $text = my_esc($_POST['text'], 'true');
  110. if (empty($_POST['login'])) {
  111. Core::msg_show('Вы не ввели логин пользователя');
  112. } elseif (empty($_POST['text']) || mb_strlen($_POST['text'], 'UTF-8') <= 1) {
  113. Core::msg_show('Сообщение слишком короткое');
  114. } elseif (mb_strlen($_POST['text'], 'UTF-8') > 1024) {
  115. Core::msg_show('Сообщение превышает 1024 символа');
  116. } elseif ($_POST['login'] == $user['nick']) {
  117. Core::msg_show('Нельзя отправлять сообщения самому себе');
  118. } elseif ($sql->query("SELECT COUNT(*) FROM `user` WHERE `nick` = '$login_mail'")->result() > 0) {
  119. $sql->query("SELECT `id` FROM `user` WHERE `nick` = '$login_mail'");
  120. $users = $sql->fetch();
  121. /* Отправляем сообщение */
  122. $sql->query("INSERT INTO `mail` (`author`, `user`, `time`, `text`) VALUES ('$user_id', '" . $users['id'] . "', '$time', '$text')");
  123. /* Добавляем пользователя в контакты, если его нету и обновляем счетчики */
  124. if ($sql->query("SELECT COUNT(*) FROM `mail_contacts` WHERE `user_id` = '$user_id' AND `id_cont` = '" . $users['id'] . "'")->result() == 0)
  125. $sql->query('INSERT INTO `mail_contacts` (`user_id`, `id_cont`, `outbox`) VALUES (' . $user_id . ', ' . $users['id'] .', "1")');
  126. else
  127. $sql->query('UPDATE `mail_contacts` SET `outbox` = `outbox`+1 WHERE `user_id` = ' . $user_id . ' AND `id_cont` = '. $users['id']);
  128.  
  129. if ($sql->query("SELECT COUNT(*) FROM `mail_contacts` WHERE `user_id` = '". $users['id'] ."' AND `id_cont` = '" . $user_id . "'")->result() == 0)
  130. $sql->query('INSERT INTO `mail_contacts` (`user_id`, `id_cont`, `inbox`, `unread`) VALUES (' . $users['id'] . ', ' . $user_id . ', "1", "1")');
  131. else
  132. $sql->query('UPDATE `mail_contacts` SET `inbox` = `inbox`+1, `unread` = `unread`+1 WHERE `user_id` = ' . $users['id'] . ' AND `id_cont` = '. $user_id);
  133.  
  134. UnSET($_SESSION['login_mail'], $_SESSION['text_mail']);
  135. $_SESSION['add_mail'] = true;
  136. Core::stop('?');
  137. } else
  138. Core::msg_show('Пользователь с логином <b>' . $login_mail . '</b> не найден');
  139. }
  140. ?>
  141. <form action="" method="POST">
  142. Введите логин пользователя:<br />
  143. <input type="text" name="login" value="<? echo empty($_SESSION['login_mail']) ? '' : $_SESSION['login_mail']; ?>" /><br />
  144. Сообщение:<br />
  145. <textarea name="text"><? echo empty($_SESSION['text_mail']) ? '' : $_SESSION['text_mail']; ?></textarea><br />
  146. <input type="submit" name="add"/>
  147. </form>
  148. <a href="?"><div class="menu_razd">Список контактов</div></a>
  149. <?
  150. break;
  151.  
  152.  
  153.  
  154.  
  155.  
  156. /*
  157. ---------------------------------
  158. Вывод контактов
  159. ---------------------------------
  160. */
  161. default:
  162. $set['title'] = 'Контакты';
  163. include H.'engine/includes/head.php';
  164. Core::get('page.class', 'classes');
  165. if (isset($_SESSION['add_mail'])) {
  166. Core::msg_show('Сообщение успешно отправлено', 'msg');
  167. UnSET($_SESSION['add_mail']);
  168. }
  169. echo '<div class="fmenu"><a href="?act=add_mail">Написать сообщение</a></div>';
  170. $count = $sql->query('SELECT COUNT(*) FROM `mail_contacts` WHERE `user_id` = ' . $user_id)->result();
  171. if ($count > 0) {
  172. $k_post = $count;
  173. $page = new page($k_post, $set['p_str']);
  174. $query = $sql->query('SELECT `mail_contacts`.*, `user`.`nick`,`user`.`pol`, `user`.`id` FROM `mail_contacts` LEFT JOIN `user` ON `mail_contacts`.`id_cont` = `user`.`id` WHERE `mail_contacts`.`user_id` = ' . $user_id . ' order by `mail_contacts`.`unread` DESC LIMIT ' . $page->limit());
  175. while ($cont = $sql->fetch())
  176. {
  177. echo '
  178. <a href="?act=mail&amp;id=' . $cont['id'] . '">
  179. <div class="link">'. Core::user_icon($cont) .' ' . $cont['nick'] . '
  180. (' . $cont['inbox'] . '/' . $cont['outbox'] . ')' .
  181. (empty($cont['unread']) ? '' : '<b>+' . $cont['unread'] . '</b>') .
  182. '</div></a>';
  183. }
  184. } else
  185. Core::msg_show('Контактов нет');
  186. }
  187.  
  188. echo '
  189. <div class="menu_razd">См. также</div>
  190. <div class="link"><a href="/pages/menu.php">Кабинет</a></div>
  191. <div class="link"><a href="/">Главная</a></div>';
  192. include H.'engine/includes/foot.php';