Вход Регистрация
Файл: 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&amp;rnd=' . $_SESSION['token']) . '">2</a>', $str);
    
$str = preg_replace('#[add_no=(.*?)](.*?)[/add_no]#si', $no . '<a href="' . gen_uri('friends','','add_no=1&amp;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&amp;user=' . $row['inbox_author'] . '&amp;rnd=' . $_SESSION['token']) . '">В контакт</a> | ';
                echo 
'<a href="' . gen_uri('ignor', '', 'add_ignor=1&amp;user=' . $row['inbox_author'] . '&amp;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&amp;user=' . $row['trash_author'] . '&amp;rnd=' . $_SESSION['token']) . '">В контакт</a> | ';
                echo 
'<a href="' . gen_uri('ignor', '', 'add_ignor=1&amp;user=' . $row['trash_author'] . '&amp;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&amp;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>';

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