Вход Регистрация
Файл: 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) >= && 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$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 'Ошибка! Вы не ввели логин пользователя!';
        }
        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>';

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