Файл: pages/mail.php
Строк: 173
<?php
include '../engine/includes/start.php';
if (!$user_id)
Core::stop();
Core::add_words('errors.ini', 'mail.ini');
/*
* By Denis27
*/
switch ($act)
{
case 'ajax':
header('Content-Type: text/xml');
?>
<response>
<new_mail><?=($user_id == 0 ? 0 : $sql->query('SELECT sum(`unread`) FROM `mail_contacts` WHERE `user_id` = ' . $user_id)->result())?></new_mail>
</response>
<?
exit;
break;
/*
---------------------------------
Переписка с пользователем
---------------------------------
*/
case 'mail':
if (!$id)
Core::stop('?');
if ($sql->query('SELECT COUNT(*) FROM `user` WHERE `id` = '.$id)->result() > 0)
{
$contact = $sql->query("SELECT `id`, `nick`, `date_reg`, `date_last`, `pol`, `group_access` FROM `user` WHERE `id` = ".$id." LIMIT 1")->fetch();
$sql->query('UPDATE `mail_contacts` SET `unread` = 0 WHERE `user_id` = '.$user_id.' AND `id_cont` = '.$id);
$user['date_last'] = time() + 300;
$set['title'] = __('Переписка с :user', array(':user' => $contact['nick']));
include incDir . 'head.php';
/* Отправка сообщения */
if (isset($_POST['add_mail'])) {
$text = my_esc($_POST['text'], true);
if (CSRF::check($_POST['token'], 'form_mail') == false)
{
Core::msg_show(__('Ошибка при отправке сообщения, попробуйте заново. Если ошибка повторяется, сообщите администратору'));
}
elseif (empty($_POST['text']) || mb_strlen($_POST['text']) <= 1) {
Core::msg_show(__('Короткое сообщение'));
} elseif (mb_strlen($_POST['text']) > 1024) {
Core::msg_show(__('Сообщение слишком длинное'));
} elseif ($id == $user_id) {
Core::msg_show(__('Нельзя отправлять сообщения самому себе'));
} else {
$sql->query("INSERT INTO `mail` (`author`, `user`, `time`, `text`) VALUES ('$user_id', '$id', '$time', '$text')");
if ($sql->query("SELECT COUNT(*) FROM `mail_contacts` WHERE `user_id` = '$user_id' AND `id_cont` = '$id'")->result() == 0)
$sql->query('INSERT INTO `mail_contacts` (`user_id`, `id_cont`, `outbox`) VALUES (' . $user_id . ', ' . $id . ', "1")');
else
$sql->query('UPDATE `mail_contacts` SET `outbox` = `outbox`+1 WHERE `user_id` = ' . $user_id . ' AND `id_cont` = '. $id);
if ($sql->query("SELECT COUNT(*) FROM `mail_contacts` WHERE `user_id` = '". $id ."' AND `id_cont` = '" . $user_id . "'")->result() == 0)
$sql->query('INSERT INTO `mail_contacts` (`user_id`, `id_cont`, `inbox`, `unread`) VALUES (' . $id . ', ' . $user_id . ', "1", "1")');
else
$sql->query('UPDATE `mail_contacts` SET `inbox` = `inbox`+1, `unread` = `unread`+1 WHERE `user_id` = ' . $id . ' AND `id_cont` = '. $user_id);
Core::msg_show(__('Сообщение успешно отправлено'), 'msg');
unset($text);
}
}
$js_form = 'form_mail';
$js_elem = 'text';
include incDir . 'JsToolBar.php';
?>
<form name="form_mail" action="?act=<?=$act . '&id=' .$id?>" method="POST">
<?=__('Сообщение')?>:<br />
<textarea name="text"><? echo !empty($text) ? $text : null ?></textarea><br />
<input type="hidden" name="token" value="<?=CSRF::generate('form_mail')?>"/>
<input type="submit" name="add_mail"/>
</form>
<?
$count = $sql->query("SELECT COUNT(*) FROM `mail` WHERE `author` = '$user_id' AND `user` = '$id' OR `author` = '$id' AND `user` = '$user_id'")->result();
if ($count > 0) {
$sql->query('UPDATE `mail` SET `no` = "1" WHERE `author` = ' . $id . ' AND `user` = ' . $user_id);
$page = new Page($count, $set['p_str']);
$i = 1;
$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());
while ($mail = $sql->fetch())
{
echo
'<div class="'.($i++ % 2 ? 'p_m' : 'p_t').'">' .
Core::user_show($mail['author'] == $id ? $contact : $user,
array('post' => Text::output($mail['text']), 'status' => $mail['time'], 'is_time' => true)) .
(empty($mail['no']) ?'<span style="color:#FF0000;float:right;">'.__('Не прочитанно').'</span>' : null) .
'</div>';
}
$page->display('?act=mail&id=' . $id . '&');
unset($text, $contact, $page, $mail, $count);
$sql->free();
} else
Core::msg_show(__('Переписка пуста'));
} else
Core::msg_show(__('Пользователь не найден'));
echo '<a href="?"><div class="menu_razd">'.__('Список контактов').'</div></a>';
break;
/*
---------------------------------
Написание сообщения
---------------------------------
*/
case 'add_mail':
$set['title'] = __('Сообщение');
include H.'engine/includes/head.php';
if (isset($_POST['add'])) {
$_SESSION['login_mail'] = my_esc($_POST['login'], 'true');
$_SESSION['text_mail'] = my_esc($_POST['text'], 'true');
$login_mail = my_esc($_POST['login'],'true');
$text = my_esc($_POST['text'], 'true');
if (CSRF::check($_POST['token'], 'form_mail') == false)
{
Core::msg_show(__('Ошибка при отправке сообщения, попробуйте заново. Если ошибка повторяется, сообщите администратору'));
}
elseif (empty($_POST['login'])) {
Core::msg_show(__('Вы не ввели логин пользователя'));
} elseif (empty($_POST['text']) || mb_strlen($_POST['text']) <= 1) {
Core::msg_show(__('Короткое сообщениее'));
} elseif (mb_strlen($_POST['text']) > 1024) {
Core::msg_show(__('Сообщение слишком длинное'));
} elseif ($_POST['login'] == $user['nick']) {
Core::msg_show(__('Нельзя отправлять сообщения самому себе'));
} elseif ($sql->query("SELECT COUNT(*) FROM `user` WHERE `nick` = '$login_mail'")->result() > 0) {
$sql->query("SELECT `id` FROM `user` WHERE `nick` = '$login_mail'");
$users = $sql->fetch();
/* Отправляем сообщение */
$sql->query("INSERT INTO `mail` (`author`, `user`, `time`, `text`) VALUES ('$user_id', '" . $users['id'] . "', '$time', '$text')");
/* Добавляем пользователя в контакты, если его нету и обновляем счетчики */
if ($sql->query("SELECT COUNT(*) FROM `mail_contacts` WHERE `user_id` = '$user_id' AND `id_cont` = '" . $users['id'] . "'")->result() == 0)
$sql->query('INSERT INTO `mail_contacts` (`user_id`, `id_cont`, `outbox`) VALUES (' . $user_id . ', ' . $users['id'] .', "1")');
else
$sql->query('UPDATE `mail_contacts` SET `outbox` = `outbox`+1 WHERE `user_id` = ' . $user_id . ' AND `id_cont` = '. $users['id']);
if ($sql->query("SELECT COUNT(*) FROM `mail_contacts` WHERE `user_id` = '". $users['id'] ."' AND `id_cont` = '" . $user_id . "'")->result() == 0)
$sql->query('INSERT INTO `mail_contacts` (`user_id`, `id_cont`, `inbox`, `unread`) VALUES (' . $users['id'] . ', ' . $user_id . ', "1", "1")');
else
$sql->query('UPDATE `mail_contacts` SET `inbox` = `inbox`+1, `unread` = `unread`+1 WHERE `user_id` = ' . $users['id'] . ' AND `id_cont` = '. $user_id);
UnSET($_SESSION['login_mail'], $_SESSION['text_mail']);
$_SESSION['add_mail'] = true;
Core::stop('?');
} else
Core::msg_show(__('Пользователь с логином <b>:nick</b> не найден', array(':nick' => $login_mail)));
}
$js_form = 'form_mail';
$js_elem = 'text';
?>
<form name="form_mail" method="POST">
<?=__('Введите логин пользователя')?>:<br />
<input type="text" name="login" value="<? echo empty($_SESSION['login_mail']) ? '' : $_SESSION['login_mail']; ?>" /><br />
<?=__('Сообщение')?>:<br />
<? include incDir . 'JsToolBar.php';?>
<textarea name="text"><? echo empty($_SESSION['text_mail']) ? '' : $_SESSION['text_mail']; ?></textarea><br />
<input type="hidden" name="token" value="<?=CSRF::generate('form_mail')?>"/>
<input type="submit" name="add"/>
</form>
<a href="?"><div class="menu_razd"><?=__('Список контактов')?></div></a>
<?
break;
/*
---------------------------------
Вывод контактов
---------------------------------
*/
default:
$set['title'] = __('Контакты');
include H.'engine/includes/head.php';
if (isset($_SESSION['add_mail'])) {
Core::msg_show(__('Сообщение успешно отправлено'), 'msg');
UnSET($_SESSION['add_mail']);
}
echo '<div class="fmenu"><a href="?act=add_mail">'.__('Написать сообщение').'</a></div>';
$count = $sql->query('SELECT COUNT(*) FROM `mail_contacts` WHERE `user_id` = ' . $user_id)->result();
if ($count > 0) {
$k_post = $count;
$page = new Page($k_post, $set['p_str']);
$query = $sql->query('SELECT `mail_contacts`.*, `user`.`nick`,`user`.`pol`, `user`.`id`, `user`.`group_access`, `user`.`date_last` 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());
while ($cont = $sql->fetch())
{
echo '
<a href="?act=mail&id=' . $cont['id'] . '">
<div class="link">'. Core::user_icon($cont) .' ' . $cont['nick'] . '
(' . $cont['inbox'] . '/' . $cont['outbox'] . ')' .
(empty($cont['unread']) ? '' : '<b>+' . $cont['unread'] . '</b>') .
'</div></a>';
}
$page->display('?');
} else
Core::msg_show('Контактов нет');
}
echo '
<div class="menu_razd">'.__('См. также').'</div>
<div class="link"><a href="/pages/menu.php">'.__('Кабинет').'</a></div>
<div class="link"><a href="/">'.__('Главная').'</a></div>';
include H.'engine/includes/foot.php';