Файл: CMS/core/modules/users_privat.php
Строк: 362
<?php
if (!defined('CMS')) { die('Access Denied!'); }
# Вспомогательная функция bb_code
function helper_bb($str = '') {
global $config;
$ok = '<img src="/images/icons/add.png" class="icon" alt"" /> ';
$no = '<img src="/images/icons/delete.png" class="icon" alt"" /> ';
$str = preg_replace('#[add_ok=(.*?)](.*?)[/add_ok]#si', $ok . '<a href="' . gen_uri('friends','', 'add_ok=1&rnd=' . $_SESSION['token']) . '">2</a>', $str);
$str = preg_replace('#[add_no=(.*?)](.*?)[/add_no]#si', $no . '<a href="' . gen_uri('friends','','add_no=1&rnd=' . $_SESSION['token']) . '">2</a>', $str);
$str = preg_replace('#[gifts=(.*?)](.*?)[/gifts]#si', '<a href="' . gen_uri('my_presents','1') . '">2</a>', $str);
$str = preg_replace('#[soo=(.*?)](.*?)[/soo]#si', '<a href="' . $config['site_url'] . '/comm/1/' . gen_uri('index','',RND) . '">2</a>', $str);
return $str;
}
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['max_limit_mail']) {
$is_ignor = (int) $db->selectCell("SELECT `ignore_id` FROM ?_users_ignor_list
WHERE `ignore_user` = ? AND `ignore_name` = ? LIMIT 1;", $to, $log);
if ($is_ignor < 1) {
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 = 'Ошибка! Вы не ввели логин пользователя!';
}
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] = '<b>' . $val . ' (' . $cnt . ')</b>';
else $show[] = $show[$key] = '<a href="' . gen_uri($key) . '">' . $val . '</a> (' . $cnt . ')';
}
echo '<div class="c">' . implode(' / ', array_unique($show)) . '</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; }
}
}
//if(frm.master_box.checked == true){ frm.master_box.checked = false; }
//else{ frm.master_box.checked = true; }
}
-->
</script>
JSCRIPT;
switch($mod):
case 'inbox':
if ($udata['users_newprivat'] > 0) {
$newprivat = num2name($udata['users_newprivat'], array('писем','письма','письмо'));
echo '<div class="c"><b><span style="color:#ff0000">Получено новых: ' . $newprivat . '</span></b></div>';
$db->query("UPDATE ?_users SET `users_newprivat` = '0' WHERE `users_login` = ? LIMIT 1;", $log);
}
$rows = $db->selectPage($total, "SELECT * FROM ?_users_inbox
WHERE `inbox_user` = ?
ORDER BY `inbox_time` DESC
LIMIT ?d, ?d", $log, $from, $onpage);
if ($total >= ($config['max_limit_mail'] - ($config['max_limit_mail'] / 10)) && $total < $config['max_limit_mail']) {
echo '<div style="text-align:center"><b><span style="color:#ff0000">';
echo 'Ваш ящик почти заполнен, необходимо очистить или удалить старые сообщения!</span></b></div>';
}
if ($total >= $config['max_limit_mail']) {
echo '<div 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 $row) {
echo '<div class="b">';
echo '<div class="right">' . get_date($row['inbox_time']) . '</div>';
echo '<div class="img">' . user_avatars($row['inbox_author']) . '</div>';
echo '<b>' . users_anketa($row['inbox_author']) . '</b> ';
echo user_title($row['inbox_author']) . ' ' . user_online($row['inbox_author']) . '<br />';
echo nl2br(bb_code($row['inbox_text'])) . '<br />';
echo '<input type="checkbox" name="del[]" value="' . num($row['inbox_id']) . '" /> ';
echo '<a href="' . gen_uri('add_privat', '', 'user=' . $row['inbox_author']) . '">Ответить</a> | ';
echo '<a href="' . gen_uri('history', '', 'user=' . $row['inbox_author']) . '">История</a> | ';
echo '<a href="' . gen_uri('contact', '', 'add_contact=1&user=' . $row['inbox_author'] . '&rnd=' . $_SESSION['token']) . '">В контакт</a> | ';
echo '<a href="' . gen_uri('ignor', '', 'add_ignor=1&user=' . $row['inbox_author'] . '&rnd=' . $_SESSION['token']) . '">Игнор</a>';
echo '</div>';
}
echo show_pages('inbox', '', 'p');
echo '<div class="b">';
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['max_limit_mail']) . '</b><br /></div>';
}
else show_error('Входящих писем еще нет!');
echo '<div class="b">';
echo icon('email_add.png', 'icons') . ' <a href="' . gen_uri('add_privat') . '">Написать письмо</a>';
echo '</div>';
break;
case 'outbox':
$rows = $db->selectPage($total, "SELECT * FROM ?_users_outbox
WHERE `outbox_author` = ?
ORDER BY `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 $row) {
echo '<div class="b">';
echo '<div class="right">' . get_date($row['outbox_time']) . '</div>';
echo '<div class="img">' . user_avatars($row['outbox_user']) . '</div>';
echo '<b>' . users_anketa($row['outbox_user']) . '</b> ';
echo user_title($row['outbox_user']) . ' ' . user_online($row['outbox_user']) . '<br />';
echo bb_code($row['outbox_text']) . '<br />';
echo '<input type="checkbox" name="del[]" value="' . num($row['outbox_id']) . '" /> ';
echo '<a href="' . gen_uri('add_privat', '', 'user=' . $row['outbox_user']) . '">Написать еще</a> | ';
echo '<a href="' . gen_uri('history', '', 'user=' . $row['outbox_user']) . '">История</a></div>';
}
echo show_pages('outbox', '', 'p');
echo '<div class="b">';
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['max_limit_mail']) . '</b><br /></div>';
}
else show_error('Отправленных писем еще нет!');
echo '<div class="b">';
echo icon('email_add.png', 'icons') . ' <a href="' . gen_uri('add_privat') . '">Написать письмо</a>';
echo '</div>';
break;
case 'trash':
$rows = $db->selectPage($total, "SELECT * FROM ?_users_trash
WHERE `trash_user` = ?
ORDER BY `trash_time` DESC
LIMIT ?d, ?d", $log, $from, $onpage);
if (!empty($rows) && $total > 0) {
foreach($rows as $row) {
echo '<div class="b">';
echo '<div class="right">' . get_date($row['trash_time']) . '</div>';
echo '<div class="img">' . user_avatars($row['trash_author']) . '</div>';
echo '<b>' . users_anketa($row['trash_author']) . '</b> ';
echo user_title($row['trash_author']) . ' ' . user_online($row['trash_author']) . '<br />';
echo bb_code($row['trash_text']) . '<br />';
echo icon('email_go.png', 'icons');
echo '<a href="' . gen_uri('add_privat', '', 'user=' . $row['trash_author']) . '">Ответить</a> | ';
echo '<a href="' . gen_uri('contact', '', 'add_contact=1&user=' . $row['trash_author'] . '&rnd=' . $_SESSION['token']) . '">В контакт</a> | ';
echo '<a href="' . gen_uri('ignor', '', 'add_ignor=1&user=' . $row['trash_author'] . '&rnd=' . $_SESSION['token']) . '">Игнор</a>';
echo '</div>';
}
echo show_pages('trash', '', 'p');
echo '<div class="b">';
echo '- Всего писем: <b>' . num($total) . '</b><br />';
echo '- Срок хранения: <b>' . num2name($config['expires_mail'], array('дней','дня','день')) . '</b><br />';
echo icon('email_delete.png', 'icons') . ' <a href="?clear=trash&rnd=' . $_SESSION['token'] . '">Очистить корзину</a></div>';
}
else show_error('Удаленных писем еще нет!');
echo '<div class="b">';
echo icon('email_add.png', 'icons') . ' <a href="' . gen_uri('add_privat') . '">Написать письмо</a>';
echo '</div>';
break;
case 'add_privat':
$form = new cmsForm('?rnd=' . $_SESSION['token'], 'post');
if (!empty($_GET['user'])) {
$user = check($_GET['user']);
$is_ignor = (int) $db->selectCell("SELECT `ignore_id` FROM ?_users_ignor_list
WHERE `ignore_user` = ? AND `ignore_name` = ? LIMIT 1;", $log, $user);
if ($is_ignor > 0) {
echo '<div class="message_warning"><b>Внимание! Данный пользователь внесен в ваш игнор-лист!</b></div>';
}
echo '<div class="b">';
echo icon('email_open.png', 'icons') . ' Сообщение для <b>' . users_anketa($user) . '</b> ' . user_visit($user) . '<br />';
echo icon('email_go.png', 'icons') . ' <a href="' . gen_uri('history', '', 'user=' . $user) . '">История переписки</a><br />';
echo '</div>';
$form->addHidden('user', $user);
}
else {
$contacts = $db->select("SELECT `contact_name` FROM ?_users_contact_list
WHERE `contact_user` = ? ORDER BY `contact_name` DESC;", $log);
if (!empty($contacts) && count($contacts) > 0) {
$contact[0] = 'Список контактов';
foreach($contacts as $val) {
$contact[$val['contact_name']] = nickname($val['contact_name']);
}
}
else {
$contact[0] = 'В контактах пусто';
}
$form->addText('Введите логин:', 'user', request('user'));
$form->addSelect('Или выберите из списка:', 'uzcon', request('uzcon'), $contact);
}
$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_user = (int) $db->selectCell("SELECT `users_id` FROM ?_users WHERE `users_login` = ? LIMIT 1;", $user);
if ($is_user > 0) {
$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="b">';
echo '<div class="img">' . user_avatars($row['inbox_author']) . '</div>';
echo '<b>' . users_anketa($row['inbox_author']) . '</b> ';
echo user_online($row['inbox_author']) . ' (' . get_date($row['inbox_time']) . ')<br />';
echo nl2br(bb_code($row['inbox_text'])) . '</div>';
}
echo show_pages(gen_uri('history', '', 'user=' . $user));
echo '<div class="b">' . 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('Вы не авторизованы, для просмотра писем, необходимо');
}
echo '<div class="b">' . icon('groups_mgr.png', 'icons');
echo ' <a href="' . gen_uri('contact', '', RND) . '">Контакт</a> | ';
echo '<a href="' . gen_uri('ignor', '', RND) . '">Игнор</a> | ';
echo '<a href="' . gen_uri('friends', '', RND) . '">Друзья</a><br /></div>';
?>