Вход Регистрация
Файл: 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) >= && 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$msgSITE_TIME);

                          if (!empty(
$_POST['sout'])) {

                              
$db->query("INSERT INTO ?_users_outbox (`outbox_user`, `outbox_author`, `outbox_text`, `outbox_time`) 
                                          VALUES (?, ?, ?, ?);"
$to$log$msgSITE_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">&nbsp;';
            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">&nbsp;';
            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&amp;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 
'&nbsp;' 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('Вы не авторизованы, для просмотра писем, необходимо');
}

?>
Онлайн: 1
Реклама