Файл: core/modules/users_privat.php
Строк: 290
<?php
if (!defined('CMS')) { die('Access Denied!'); }
if ($is_logged) {
$error = '';
$mod = ($mod == 'privat') ? 'inbox' : $mod;
$onpage = !empty($config['privat_num']) ? num($config['privat_num']) : 10;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
$actions = array('inbox' => 'Входящие', 'outbox' => 'Отправленные', 'trash' => 'Корзина');
$udata = $db->selectRow("SELECT `u`.*,
(SELECT COUNT(`inbox_id`) FROM ?_users_inbox WHERE `inbox_user` = `u`.`users_login`) AS `inbox`,
(SELECT COUNT(`outbox_id`) FROM ?_users_outbox WHERE `outbox_author` = `u`.`users_login`) AS `outbox`,
(SELECT COUNT(`trash_id`) FROM ?_users_trash WHERE `trash_user` = `u`.`users_login`) AS `trash`
FROM ?_users `u` WHERE `u`.`users_login` = ? LIMIT 1;", $log);
if (!empty($_POST['send_privat'])) {
$_SESSION['crc32'] = !empty($_SESSION['crc32']) ? $_SESSION['crc32'] : NULL;
$_SESSION['captcha_key'] = !empty($_SESSION['captcha_key']) ? $_SESSION['captcha_key'] : NULL;
$_SESSION['captcha_failures'] = !empty($_SESSION['captcha_failures']) ? $_SESSION['captcha_failures'] : 0;
$msg = !empty($_POST['msg']) ? check($_POST['msg']) : '';
if (!empty($_POST['uzcon'])) {
$to = check($_POST['uzcon']);
}
else if (!empty($_POST['user'])) {
$to = check($_POST['user']);
}
else $to = '';
$code = !empty($_POST['code']) ? num($_POST['code']) : 0;
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (!empty($to)) {
if ($to != $log || is_admin()) {
if ($udata['users_point'] >= $config['privat_protect'] || $code == $_SESSION['captcha_key'] || is_admin()) {
if (cms_strlen($msg) >= 5 && cms_strlen($msg) < 1000) {
$is_user = (int) $db->selectCell("SELECT `users_id` FROM ?_users WHERE `users_login` = ? LIMIT 1;", $to);
if ($is_user > 0) {
$uztotal = (int) $db->selectCell("SELECT COUNT(1) FROM ?_users_inbox WHERE `inbox_user` = ?;", $to);
if ($uztotal < $config['limit_mail']) {
if (is_flood($log)) {
$msg = antimat($msg);
$msg = smiles($msg);
$db->query("UPDATE ?_users SET `users_newprivat` = (`users_newprivat` + 1) WHERE `users_login` = ? LIMIT 1;", $to);
$db->query("INSERT INTO ?_users_inbox (`inbox_user`, `inbox_author`, `inbox_text`, `inbox_time`)
VALUES (?, ?, ?, ?);", $to, $log, $msg, SITE_TIME);
if (!empty($_POST['sout'])) {
$db->query("INSERT INTO ?_users_outbox (`outbox_user`, `outbox_author`, `outbox_text`, `outbox_time`)
VALUES (?, ?, ?, ?);", $to, $log, $msg, SITE_TIME);
}
//$db->query("DELETE FROM ?_users_outbox WHERE `outbox_author` = ? AND `outbox_time` < (SELECT MIN(`outbox_time`) FROM (SELECT `outbox_time` FROM ?_users_outbox WHERE `outbox_author`=? ORDER BY `outbox_time` DESC LIMIT ".$config['limitoutmail'].") AS del);", array($log, $log));
$_SESSION['captcha_key'] = NULL;
$_SESSION['captcha_failures'] = 0;
$inSes->addMessage('Ваше письмо успешно отправлено!', 'ok');
gen_red('privat', '', RND);
}
else $error = 'Антифлуд! Разрешается отправлять сообщения раз в ' . flood_period() . ' секунд!';
}
else $error = 'Ошибка! Ящик получателя переполнен!';
}
else $error = 'Ошибка! Данного адресата не существует!';
}
else $error = 'Ошибка! Слишком длинное или короткое сообщение!';
}
else $error = 'Ошибка! Проверочное число не совпало с данными на картинке!';
}
else $error = 'Ошибка! Нельзя отправлять письма самому себе!';
}
else $error = 'Ошибка! Вы не ввели логин пользователя!';
}
else $error = 'Ошибка! Неверный идентификатор сессии, повторите действие!';
if (!empty($error)) $inSes->addMessage($error, 'error');
}
else if (!empty($_POST['del'])) { // Удаление писем
$del = intar($_POST['del']);
$type = !empty($_POST['type']) ? check($_POST['type']) : '';
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (!empty($del)) {
$del = is_array($del) ? $del : array($del);
$del = implode(',', $del);
if ($type == 'outbox') {
$db->query("DELETE FROM ?_users_outbox WHERE `outbox_id` IN (" . $del . ") AND `outbox_author` = ?;", $log);
$inSes->addMessage('Выбранные сообщения успешно удалены!', 'ok');
gen_red('outbox', '', RND);
}
else if ($type == 'inbox') {
$deltrash = SITE_TIME + 86400 * $config['expires_mail'];
$db->query("DELETE FROM ?_users_trash WHERE `trash_del` < ?;", SITE_TIME);
$db->query("INSERT INTO ?_users_trash (`trash_user`, `trash_author`, `trash_text`, `trash_time`, `trash_del`) SELECT `inbox_user`, `inbox_author`, `inbox_text`, `inbox_time`, ? FROM ?_users_inbox WHERE `inbox_id` IN (" . $del . ") AND `inbox_user` = ?;", $deltrash, $log);
$db->query("DELETE FROM ?_users_inbox WHERE `inbox_id` IN (" . $del . ") AND `inbox_user` = ?;", $log);
$inSes->addMessage('Выбранные сообщения успешно удалены!', 'ok');
gen_red('inbox', '', RND);
}
else $error = 'Ошибка! Неверно указано действие!';
}
else $error = 'Ошибка удаления! Отсутствуют выбранные сообщения!';
}
else $error = 'Ошибка! Неверный идентификатор сессии, повторите действие!';
if (!empty($error)) $inSes->addMessage($error, 'error');
}
if (!empty($_GET['clear'])) { // Очистка почты
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if ($_GET['clear'] == 'trash') {
$db->query("DELETE FROM ?_users_trash WHERE `trash_user` = ?;", $log);
$inSes->addMessage('Ящик успешно очищен!', 'ok');
gen_red('privat', '', RND);
}
else $inSes->addMessage('Ошибка! Неверно указано действие!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
show_header('Приватные сообщения');
$show = array();
foreach($actions as $key => $val) {
$cnt = !empty($udata[$key]) ? num($udata[$key]) : 0;
if (!empty($mod) && $mod == $key) $show[$key] = '<td style="width:33%"><span>' . $val . ' (' . $cnt . ')</span></td>';
else $show[] = $show[$key] = '<td style="width:33%"><a href="' . gen_uri($key) . '">' . $val . ' (' . $cnt . ')</a></td>';
}
echo '<div class="blocks"><table><tr>' . implode('', array_unique($show)) . '</tr></table></div>';
echo <<<JSCRIPT
<script language='JavaScript' type="text/javascript">
<!--
function ckeck_uncheck_all() {
var frm = document.privat;
if(frm.master_box.checked == true){ frm.master_box.checked = false; }
else{ frm.master_box.checked = true; }
for (var i=0;i<frm.elements.length;i++) {
var elmnt = frm.elements[i];
if (elmnt.type=='checkbox') {
if(frm.master_box.checked == true){ elmnt.checked=false; }
else{ elmnt.checked=true; }
}
}
}
-->
</script>
JSCRIPT;
switch($mod):
case 'inbox':
if ($udata['users_newprivat'] > 0) {
$newprivat = num2name($udata['users_newprivat'], array('писем','письма','письмо'));
echo '<div class="message_info">Получено новых: ' . $newprivat . '</div>';
$db->query("UPDATE ?_users SET `users_newprivat` = '0' WHERE `users_login` = ? LIMIT 1;", $log);
}
$rows = array();
$rows = $db->selectPage($total, "SELECT `p`.*, `v`.`visit_nowtime`, `u`.`users_id`, `u`.`users_gender`
FROM ?_users_inbox `p`
LEFT JOIN ?_users_visit `v`
ON `p`.`inbox_author` = `v`.`visit_user`
LEFT JOIN ?_users `u`
ON `p`.`inbox_author` = `u`.`users_login`
WHERE `p`.`inbox_user` = ?
ORDER BY `p`.`inbox_time` DESC
LIMIT ?d, ?d", $log, $from, $onpage);
if ($total >= ($config['limit_mail'] - ($config['limit_mail'] / 10)) && $total < $config['limit_mail']) {
echo '<div class="bl" style="text-align:center"><b><span style="color:#ff0000">';
echo 'Ваш ящик почти заполнен, необходимо очистить или удалить старые сообщения!</span></b></div>';
}
if ($total >= $config['limit_mail']) {
echo '<div class="bl" style="text-align:center"><b><span style="color:#ff0000">';
echo 'Ваш ящик переполнен, вы не сможете получать письма пока не очистите его!</span></b></div>';
}
if (!empty($rows) && $total > 0) {
echo '<form action="?rnd=' . $_SESSION['token'] . '" method="post" name="privat">';
echo '<input type="hidden" name="type" value="inbox" />';
foreach ($rows as $numRow => $row) {
echo '<div class="bl">';
echo '<table class="w100"><tr>';
echo '<td class="vhr" valign="top">' . user_avatars($row['inbox_author']) . '</td>';
echo '<td valign="top">';
echo '<span class="fr xsmall">' . get_date($row['inbox_time']) . '</span>';
echo user_visit_icon($row['inbox_author'], $row['users_gender'], $row['visit_nowtime']);
echo ' ' . users_anketa($row['users_id'], $row['inbox_author']) . '<hr />';
echo nl2br(bb_code($row['inbox_text'])) . '</td></tr>';
echo '<tr><td><input type="checkbox" name="del[]" value="' . num($row['inbox_id']) . '" /></td><td>';
echo '<a href="' . gen_uri('add_privat', '', 'user=' . $row['inbox_author']) . '">Ответить</a> | ';
echo '<a href="' . gen_uri('dialog', $row['users_id'], RND) . '">Диалог</a> | ';
echo '<a href="' . gen_uri('history', '', 'user=' . $row['inbox_author']) . '">История</a>';
echo '</td></tr></table></div>';
}
echo show_pages('inbox', '', 'p');
echo '<div class="bl"> ';
echo '<input type="checkbox" name="master_box" title="Отметить всё" onclick="javascript:ckeck_uncheck_all()"> ';
echo '<input type="submit" class="btns" value="Удалить выбранное" /></form><br />';
echo 'Всего писем: <b>' . num($total) . '</b><br />';
echo 'Объем ящика: <b>' . num($config['limit_mail']) . '</b></div>';
}
else show_error('Входящих писем еще нет!');
echo '<div class="link"><a href="' . gen_uri('add_privat', '', RND) . '">Написать письмо</a></div>';
break;
case 'outbox':
$rows = array();
$rows = $db->selectPage($total, "SELECT `p`.*, `v`.`visit_nowtime`, `u`.`users_id`, `u`.`users_gender`
FROM ?_users_outbox `p`
LEFT JOIN ?_users_visit `v`
ON `p`.`outbox_user` = `v`.`visit_user`
LEFT JOIN ?_users `u`
ON `p`.`outbox_user` = `u`.`users_login`
WHERE `p`.`outbox_author` = ?
ORDER BY `p`.`outbox_time` DESC
LIMIT ?d, ?d", $log, $from, $onpage);
if (!empty($rows) && $total > 0) {
echo '<form action="?rnd=' . $_SESSION['token'] . '" method="post" name="privat">';
echo '<input type="hidden" name="type" value="outbox" />';
foreach($rows as $numRow => $row) {
echo '<div class="bl">';
echo '<table class="w100"><tr>';
echo '<td class="vhr" valign="top">' . user_avatars($row['outbox_user']) . '</td>';
echo '<td valign="top">';
echo '<span class="fr xsmall">' . get_date($row['outbox_time']) . '</span>';
echo user_visit_icon($row['outbox_user'], $row['users_gender'], $row['visit_nowtime']);
echo ' ' . users_anketa($row['users_id'], $row['outbox_user']) . '<hr />';
echo nl2br(bb_code($row['outbox_text'])) . '</td></tr>';
echo '<tr><td><input type="checkbox" name="del[]" value="' . num($row['outbox_id']) . '" /></td><td>';
echo '<a href="' . gen_uri('add_privat', '', 'user=' . $row['outbox_user']) . '">Написать еще</a> | ';
echo '<a href="' . gen_uri('dialog', $row['users_id'], RND) . '">Диалог</a> | ';
echo '<a href="' . gen_uri('history', '', 'user=' . $row['outbox_user']) . '">История</a>';
echo '</td></tr></table></div>';
}
echo show_pages('outbox', '', 'p');
echo '<div class="bl"> ';
echo '<input type="checkbox" name="master_box" title="Отметить всё" onclick="javascript:ckeck_uncheck_all()"> ';
echo '<input type="submit" class="btns" value="Удалить выбранное" /></form><br />';
echo 'Всего писем: <b>' . num($total) . '</b><br />';
echo 'Объем ящика: <b>' . num($config['limit_mail']) . '</b></div>';
}
else show_error('Отправленных писем еще нет!');
echo '<div class="link"><a href="' . gen_uri('add_privat', '', RND) . '">Написать письмо</a></div>';
break;
case 'trash':
$rows = array();
$rows = $db->selectPage($total, "SELECT `p`.*, `v`.`visit_nowtime`, `u`.`users_id`, `u`.`users_gender`
FROM ?_users_trash `p`
LEFT JOIN ?_users_visit `v`
ON `p`.`trash_author` = `v`.`visit_user`
LEFT JOIN ?_users `u`
ON `p`.`trash_author` = `u`.`users_login`
WHERE `p`.`trash_user` = ?
ORDER BY `p`.`trash_time` DESC
LIMIT ?d, ?d", $log, $from, $onpage);
if (!empty($rows) && $total > 0) {
foreach ($rows as $numRow => $row) {
echo '<div class="bl">';
echo '<table class="w100"><tr>';
echo '<td class="vhr" valign="top">' . user_avatars($row['trash_author']) . '</td>';
echo '<td valign="top">';
echo '<span class="fr xsmall">' . get_date($row['trash_time']) . '</span>';
echo user_visit_icon($row['trash_author'], $row['users_gender'], $row['visit_nowtime']);
echo ' ' . users_anketa($row['users_id'], $row['trash_author']) . '<hr />';
echo nl2br(bb_code($row['trash_text'])) . '</td></tr>';
echo '<tr><td> </td><td>';
echo '<a href="' . gen_uri('add_privat', '', 'user=' . $row['trash_author']) . '">Ответить</a> | ';
echo '<a href="' . gen_uri('dialog', $row['users_id'], RND) . '">Диалог</a> | ';
echo '<a href="' . gen_uri('history', '', 'user=' . $row['trash_author']) . '">История</a>';
echo '</td></tr></table></div>';
}
echo show_pages('trash', '', 'p');
echo '<div class="bl">';
echo 'Всего писем: <b>' . num($total) . '</b><br />';
echo 'Срок хранения: <b>' . num2name($config['expires_mail'], array('дней','дня','день')) . '</b></div>';
echo '<div class="link"><a href="?clear=trash&rnd=' . $_SESSION['token'] . '">Очистить корзину</a></div>';
}
else show_error('Удаленных писем еще нет!');
echo '<div class="link"><a href="' . gen_uri('add_privat', '', RND) . '">Написать письмо</a></div>';
break;
case 'add_privat':
$config['privat_protect'] = !empty($config['privat_protect']) ? (int) $config['privat_protect'] : 0;
$form = new cmsForm('?rnd=' . $_SESSION['token'], 'post');
if (!empty($_GET['user'])) {
$user = check($_GET['user']);
$data = array();
$data = $db->selectRow("SELECT * FROM ?_users
WHERE `users_login` = ? LIMIT 1;", $user);
if (!empty($data)) {
echo '<div class="bl">';
echo 'Сообщение для <b>' . users_anketa($data['users_id'], $data['users_login']) . '</b> ' . user_visit($data['users_login']);
echo '<br /></div>';
$form->addHidden('user', $user);
}
else {
show_error('Пользователь не найден!');
$form->addText('Введите логин:', 'user', request('user'));
}
}
else {
$form->addText('Введите логин:', 'user', request('user'));
}
$form->addTextarea('Сообщение:', 'msg', request('msg'));
if ($udata['users_point'] < $config['privat_protect'] && !is_admin()) {
$form->addCaptcha('Проверочный код:', 'code');
}
$form->addRadio('Сохранить в исходящих', 'sout', '1', array('1' => 'Да', '0' => 'Нет'));
echo $form->Submit('Отправить', 'send_privat');
unset($form);
break;
case 'history':
if (!empty($_REQUEST['user'])) {
$user = check($_REQUEST['user']);
if ($user != $log) {
$is_uid = 0;
$is_uid = (int) $db->selectCell("SELECT `users_id` FROM ?_users WHERE `users_login` = ? LIMIT 1;", $user);
if ($is_uid > 0) {
$rows = array();
$rows = $db->selectPage($total, "SELECT * FROM ?_users_inbox WHERE `inbox_user` = ? AND `inbox_author` = ? UNION ALL
SELECT * FROM ?_users_outbox WHERE `outbox_user` = ? AND `outbox_author` = ?
ORDER BY `inbox_time` DESC
LIMIT ?d, ?d", $log, $user, $user, $log, $from, $onpage);
if (!empty($rows) && $total > 0) {
foreach($rows as $row) {
echo '<div class="bl">';
echo '<table class="w100"><tr>';
echo '<td class="vhr" valign="top">' . user_avatars($row['inbox_author']) . '</td>';
echo '<td valign="top">';
echo '<span class="fr xsmall">' . get_date($row['inbox_time']) . '</span>';
echo ' ' . nickname($row['inbox_author']) . '<hr />';
echo nl2br(bb_code($row['inbox_text'])) . '</td></tr>';
echo '</table></div>';
}
echo show_pages(gen_uri('history', '', 'user=' . $user));
echo '<div class="bl">' . icon('email_add.png', 'icons');
echo '<a href="' . gen_uri('add_privat', '', 'user=' . $row['inbox_author']) . '">Написать письмо</a></div>';
}
else show_error('Истории переписки с пользователем ' . $user . ' не найдена!');
}
else show_error('Ошибка! Данного пользователя не существует!');
}
else show_error('Ошибка! Отсутствует переписка с самим собой!');
}
$form = new cmsForm('?');
$form->addText('Имя участника:', 'user', request('user'));
$form->Submit('Найти');
unset($form);
break;
endswitch;
}
else {
show_header('Личная почта');
show_login('Вы не авторизованы, для просмотра писем, необходимо');
}
?>