Вход Регистрация
Файл: pages/account/mail.php
Строк: 478
<?php
// Physical module map v50.6: public URL stays clean while code lives in /pages.
if (!defined('GAME_ROOT')) define('GAME_ROOT'dirname(__DIR__2));
chdir(GAME_ROOT);
if (
PHP_SAPI !== 'cli') { $_SERVER['PHP_SELF']='/mail.php'$_SERVER['SCRIPT_NAME']='/mail.php'; }

/* Обновление игры под PHP 8.4 / PDO и усиление безопасности: by Метриум (Стэлп) */
    
    
include './system/common.php';
    
 include 
'./system/functions.php';
        
      include 
'./system/user.php';
    
if(!
$user) {

  
header('location: /');
  
  exit;

}

$id = (int)_num(($_GET['id'] ?? 0));
$isSystem = ($id === 2);
?>
<div class='main'>
<?php

if($id) {

  if(
$isSystem) {
    
// Виртуальная Система: отдельный персонаж в users не требуется.
    
$ho = ['id'=>2,'login'=>'Система','level'=>0,'r'=>'bot','online'=>time(),'access'=>0,'mailclosed'=>1];
  } else {
    
$ho db_fetch_array(db_query('SELECT * FROM `users` WHERE `id`='.(int)$id.' LIMIT 1'));
  }
  if(!
$isSystem && (!$id || !$ho || $id == (int)$user['id'])) {
    
header('location: /mail/');
    exit;
  }
  
$title $isSystem 'Система' 'Диалог с '.$ho['login'];    

  include 
'./system/h.php';
if(
$isSystem){ db_query('UPDATE `mail` SET `read`=1 WHERE `to`='.(int)$user['id'].' AND `from` IN (0,2)'); } else { db_query('UPDATE `mail` SET `read`=1 WHERE `to`='.(int)$user['id'].' AND `from`='.(int)$ho['id']); }

  
  echo 
'<div class="main">';
?>
<?php
if(isset($_SESSION['chok'])){
echo 
smiles($_SESSION['chok']);
unset(
$_SESSION['chok']);
}
if(isset(
$_SESSION['choke'])){
echo 
smiles($_SESSION['choke']);
unset(
$_SESSION['choke']);

}
if(isset(
$_SESSION['chok2'])){
echo 
smiles($_SESSION['chok2']);
unset(
$_SESSION['chok2']);
}
if(isset(
$_SESSION['choke2'])){
echo 
smiles($_SESSION['choke2']);
unset(
$_SESSION['choke2']);

}

?>

<?php
if($isSystem) {
echo 
"<center><font color='orange'>Система</font><img src='/images/smiles/mini_ulibka.gif'></center>";
}
?>
<div class='menuList'><li><a href='/mail/'><img src='/images/icon/arrow.png' alt=''/>Назад в почту</a></li></div><div class='mini-line'></div>
<?php
  
if(db_result(db_query('SELECT COUNT(*) FROM `contacts` WHERE `user` = ''.$user['id'].'' AND `ho` = ''.$ho['id'].'''),0) == 0) {
    
    
db_query('INSERT INTO `contacts` (`user`,
                                           
                                           `ho`,
                                         
                                         `time`) VALUES (''.$user['
id'].'',
                                         
                                                           ''.$ho['
id'].'',
                                         
                                                              ''.time().'')'
);
  
  
  }

  if(
db_result(db_query('SELECT COUNT(*) FROM `contacts` WHERE `ho` = "'.$user['id'].'" AND `user` = "'.$ho['id'].'"'),0) == 0) {
   
    
db_query('INSERT INTO `contacts` (`ho`,
    
                                       `user`,
    
                                       `time`) VALUES (''.$user['
id'].'',
    
                                                         ''.$ho['
id'].'',
    
                                                            ''.time().'')'
);
  
  }

if(!
$isSystem && (int)($ho['mailclosed'] ?? 0)===1) {
echo 
"<center><font color='lime'>Почта {$ho['login']} закрыта</font></center>";
}
if((int)
$user['level']<19) {
echo 
"<center>Почта доступна с 20 уровня</center>";
}

if(
$user['maill']==1) {
echo 
"<center><font color='lime'>Вы забанены в почте</font></center>";
}
  if(
$ho['r'] != $user['r']) $_s 100; else $_s 1;


  
$text _string(($_POST['text'] ?? ''));

if(
db_result(db_query('SELECT COUNT(*) FROM `blacklist` WHERE `user2` = ''.$user['id'].'' AND `user` = ''.$ho['id'].'''),0) != 0){
 echo
'<center>Вы в черном списке '.$ho['login'].'</center>';  
}else{
  if(
$text && !$isSystem) {

    
$antiflood db_fetch_array(db_query('SELECT * FROM `mail` WHERE `from` = ''.$user['id'].'' ORDER BY `time` DESC LIMIT 1'));
  
    if(
$antiflood && time() - (int)($antiflood['time'] ?? 0) < 10$errors[] = 'Писать можно 1 раз в 10 секунд';

    
    if(
$user['s'] < $_s$errors[] = 'Не хватает <img src='/images/icon/silver.png' alt='*'/> '.($_s $user['s']).' серебра<div class='separ'></div><a href='/trade/'>Купить</a>';

    if(
$errors) {

      echo 
'<div class='block' align='center'>';
        
      foreach(
$errors as $error) {
          
        echo 
$error.'<br/>';
          
      }
      
      echo 
'</div>
<div class='
mini-line'></div>';

    }
    else
    {

      
$text preg_replace('~[a-z][a-z0-9+.-]*://[^<>s]+~iu''*'$text) ?? $text;
        
        
$arrReplace = array('.ru',
                                 
'.net',
                                 
'.com',
                                  
'.рф',
                                  
'.tk',
                                  
'ref=',
                                  
'.su',
                                  
'.us',
 
                                
'.mobi',
                                
'.X-com',
                                  
'.ua',
'.keo.su',
'.ру',
'aux.su',

'. r u',
'.доброзло.де',
'.доброзло. де',
'.доброзло.д е',
'.д оброзло.де',
'.д о брозло.де',
'.д о б р о з л о.де',
'.доброз ло.д е',
'.д обр озло.де',
'.до брозл о.де',
                                  
'vtutage',
                                  
'vipgame',
                               
                                 
'.ru',
                                 
'. tk',
                                 
'. t k',
                                 
'wart',
                                 
'.Ru',
                                
'.r U',
                                 
'.ру',
                                  
'.RU',
                           
                                  
'.RLDOFDA',
                            
                                
                                   
'ДОБРО ПРОТИВ',
                                  
                                   
'доброзло',
                                   
'до бр оз ло',
                                   
'доброзло.де',
                                
                              
                                  
' ЗЛО',
                                  
'.mir',
                                  
'.de',
                                  
'dobrozlo',
                                 
'.tk',
                                 
'. t k',
                                 
'.t-k',
                                          
'do br oz lo',
                                          
'dob',
                                  
'.d e',
                                  
'.d  e',
                                 
'.r',
'.zzz.com.ua',

'.net',

'.pro',
'pro',
'pr o',
                                
                                
'http');

$size count($arrReplace);
  while(
$size--)
{
if(
substr_count($text$arrReplace[$size]))
{
db_query("INSERT INTO `mail` SET `from`='0',`to`='1',`text`=' Пользователь ".$user['login']." | ID: ".$user['id']." нарушает правила игры! Сообщение: ".$text."',`time`='".time()."'");
db_query("INSERT INTO `ban` SET `user`='".$user['id']."',`time`='2147483647',`text`='Нарушение правил игры!',`who`='Система', `ip`='".$user['ip']."'");
break;
}
}

$text str_replace($arrReplace'*'$text);

      
db_query('UPDATE `users` SET `s` = `s` - '.$_s.' WHERE `id` = ''.$user['id'].''');

      
db_query('INSERT INTO `mail` (`from`,
      
                                         `to`,
      
                                       `text`,
      
                                       `time`) VALUES (''.$user['
id'].'',
                                                         
                                                         ''.$ho['
id'].'',
      
                                                             ''.$text.'',
      
                                                            ''.time().'')'
);
                                                            
      
db_query('UPDATE `contacts` SET `time` = ''.time().'' WHERE `user` = ''.$user['id'].'' AND `ho` = ''.$ho['id'].''');
     
      
db_query('UPDATE `contacts` SET `time` = ''.time().'' WHERE `ho` = ''.$user['id'].'' AND `user` = ''.$ho['id'].''');
     
      
header('location: /mail/'.$ho['id'].'/');
   
    }

  }


if((
$_GET['the'] ?? '')=='act') {
db_query("INSERT INTO `blacklist` (`user`,`user2`)VALUES('{$user['id']}','{$ho['id']}')");

$_SESSION['chok'] = '<center> <font color="green"><img src="/images/icon/ok.png"> ('.$ho['login'].')
добавлен в ваш чёрный список </center>'
;

header('location:?');
}
if((
$_GET['the'] ?? '')=='act3') {
db_query("INSERT INTO `friends` (`user`,`user2`)VALUES('{$user['id']}','{$ho['id']}')");

$_SESSION['chok2'] = '<center> <font color="lime"><img src="/images/icon/ok.png"> ('.$ho['login'].')
добавлен в список друзей </center>'
;

header('location:?');
}

if((
$_GET['the'] ?? '')=='act2') {
db_query("DELETE FROM `blacklist` WHERE `user2` = ".$ho['id']."");

$_SESSION['choke'] = '<center><font color="green"><img src="/images/icon/ok.png"> ('.$ho['login'].') Удален с вашего чёрного списка</font></center>';

header('location:?');
}


if((
$_GET['the'] ?? '')=='act4') {
db_query("DELETE FROM `friends` WHERE `user2` = ".$ho['id']."");

$_SESSION['choke2'] = '<center> <font color="lime"><img src="/images/icon/ok.png"> ('.$ho['login'].')
Удален с списка друзей</center>'
;

header('location:?');
}
if(
$ho['id'] != 2){ 
if(
$user['id'] !=9930) {
if((int)(
$ho['mailclosed'] ?? 0) !== 1) {
if(
$user['maill']==0) {
if(
$user['level']>19) {
    
// by Метриум (Стэлп)
    
?>
    
    
    <style>
.message_usr{
position:relative;
white-space:nowrap;
padding:6px 2px 6px 12px;
font:normal 16px arial,sans-serif;
overflow:hidden;
}
.yea_from{
color:#888;
font-size:12px;
padding-bottom:3px;
text-shadow:rgba(255,255,255,0.2) 0 0 12px;
transition:opacity 300ms;
-moz-transition:opacity 300ms;
-o-transition:opacity 300ms;
-webkit-transition:opacity 300ms;
}
.yea_from span{
display:block;
display:inline-block;
overflow:hidden;
text-overflow:ellipsis;
width:100%;
}

.user_avatar2{
-ms-box-sizing:border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
box-sizing:border-box;
background-repeat:no-repeat;
background-size:cover;
background-position:0 0;
overflow:hidden;
}
.user_avatar{
vertical-align:top;
position:static;
margin-right:12px;
width:36px;
height:36px;
min-width:36px;
min-height:36px;
border-radius:18px;
display:none;
}

.block_avatar{
display:-moz-inline-box;
-moz-box-orient:vertical;
display:inline-block;
vertical-align:middle;    
}

.message_text_v3{
max-width:70%;
display:-moz-inline-box;
-moz-box-orient:vertical;
display:inline-block;
vertical-align:middle;
vertical-align:top;
text-align:left;
position:relative;
margin-right:103px;
margin-left:12px;
white-space:normal;
background-color:#3a3535;
border-radius:5px;
word-break:break-word;
-ms-box-sizing:border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
box-sizing:border-box;
box-shadow:0 0 10px -1px rgba(24,24,24,0.14);
-webkit-box-shadow:    0 0 10px -1px rgba(24,24,24,0.14);
}
@media screen and (max-width: 1349px) and (min-device-width: 800px) and (min-width: 500px){
.message_text_v3{
max-width:80%;
}}
.message_text_v3{
margin-left:0;
}
.message_text_v3block{
word-wrap:break-word;
padding:9px 0 12px 14px;
display:inline-block;
-ms-box-sizing:border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
box-sizing:border-box;
width:    100%;
}
.message_text_v3block{
padding-right:10px;
}
.message_dates{
color:#888;
font-size:12px;
position:absolute;
top:0;
right:auto;
bottom:auto;
left:100%;
white-space:nowrap;
padding:12px 7px;
}
.message_date_status{
display:none;
width:25px;
height:12px;
background-image:none;
background-position:100px 100px;
background-repeat:no-repeat;
background-attachment:scroll;
background-size:35px 5000px;
}
.message_date_time{
text-shadow:rgba(255,255,255,0.2) 0 0 12px;
transition:opacity 300ms;
-moz-transition:opacity 300ms;
-o-transition:opacity 300ms;
-webkit-transition:opacity 300ms;
}
.message_me_self{
text-align:right;
}
.message_me_from{
display:none;
}
.message_text_v2{
max-width:70%;
display:-moz-inline-box;
-moz-box-orient:vertical;
display:inline-block;
vertical-align:middle;
vertical-align:top;
text-align:left;
position:relative;
margin-right:103px;
margin-left:12px;
white-space:normal;
background-color:#3a3535;
border-radius:5px;
word-break:break-word;
-ms-box-sizing:border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
box-sizing:border-box;
box-shadow:0 0 10px -1px rgba(24,24,24,0.14);
-webkit-box-shadow:    0 0 10px -1px rgba(24,24,24,0.14);
}
@media screen and (max-width: 1349px) and (min-device-width: 800px) and (min-width: 500px){
.message_text_v2{
max-width:80%;
}}
.message_text_v2{
margin-right:0;    
margin-left:65px;
background-color:rgba(220, 248, 198, 0.4);
}
.message_text_v2{
margin-left:65px;
}
.messages_date{
left:auto;
right:100%;
}
.button {


color:#666;
padding: 7px;

}
.button3 {
background-image:url(/images/smiles/blum.gif);
background-color: #666;
background-position:center;
background-repeat:no-repeat;
border-bottom:2px solid #330066;
border-left:2px solid #330066;
border-radius:50px;
border-right:2px solid #330066;
border-top:2px solid #330066;
width:35px;
height:35px;
}

.button4 {
    background-image: url(/images/smiles/bwink.gif);
    background-color: #666;
    background-position: center;
    background-repeat: no-repeat;
    border-bottom: 2px solid #330066;
    border-left: 2px solid #330066;
    border-radius: 50px;
    border-right: 2px solid #330066;
    border-top: 2px solid #330066;
    width: 35px;
    height: 35px;
}
</style>
<script>
    function showContent(link) {

        var cont = document.getElementById('contentBody');
        var loading = document.getElementById('loading');

        cont.innerHTML = loading.innerHTML;

        var http = createRequestObject();
        if( http ) {
            http.open('get', link);
            http.onreadystatechange = function () {
                if(http.readyState == 4) {
                    cont.innerHTML = http.responseText;    
                }
            }
            http.send(null);    
        } else {
            document.location = link;
        }
    }
    function createRequestObject() {
        try { return new XMLHttpRequest() }
        catch(e) {
            try { return new ActiveXObject('Msxml2.XMLHTTP') }
            catch(e) {
                try { return new ActiveXObject('Microsoft.XMLHTTP') }
                catch(e) { return null; }
            }
        }
    }
</script>


    

 
<div class='block_zero'>

  <form action='/mail/<?=$ho['id'];?>' method='post'>
   <center>  <input type="button" class="button3" onClick="showContent('/chat/page1.html')" value="">
   <input type="button" class="button4" onClick="showContent('/chat/page2.html')" value=""/></center>
    Сообщение:<br/><input   id='sml' name='text' style='width: 90%;' heidth=2px; class='text'></a></a> </a><br/>
     <span class='btn'><span class='end'><input class='label' type='submit'>Отправить</span></span>
    
  </form>
  
  
  
     <script type='text/javascript'>
        /*<![CDATA[*/
        function sml(id, html) {
            var e = document.getElementById(id);
            if (e != null) {
                e.value += ' ' + html + ' ';
                e.focus();
            }
        }
        /*]]>*/
        </script>
<?php


echo "<div id='contentBody'>";
echo 
"</div>";
echo 
'<div id="loading" style="display: none">';
echo 
"Идет загрузка...";
echo 
"</div>";
?>

<?php
 
echo' <center><font color='#909090'><small><small>Стоимость сообщения '.($user['r'] == $ho['r'] ? 'своей':'чужой').' фракции <img src='/images/icon/silver.png' alt='*'/> '.$_s.'</font></small></small></font></center>
</div></div>

<
div class='mini-line'></div>';


}
}
}
}
}
}
    $max = 10;
  if($isSystem) $count=(int)db_result(db_query('
SELECT COUNT(*) FROM `mailWHERE (`to`='.(int)$user['id'].' AND `fromIN (0,2)) OR (`from`='.(int)$user['id'].' AND `toIN (0,2))'),0); else $count=(int)db_result(db_query('SELECT COUNT(*) FROM `mailWHERE (`from`='.(int)$user['id'].' AND `to`='.(int)$ho['id'].') OR (`to`='.(int)$user['id'].' AND `from`='.(int)$ho['id'].')'),0);
  $pages = ceil($count/$max);
   $page = _string(_num(($_GET['
page'] ?? 1)));

  if($page > $pages) $page = $pages;

  if($page < 1) $page = 1;
    
  $start = $page * $max - $max;

  if($count > 0) {
    
    $col = array('
#ffffff', '#f09060', '#90c0c0');
    
    
$uidMail=(int)$user['id'];
    if(
$isSystem){
      
$q=db_query('SELECT * FROM `mail` WHERE ((`to`='.$uidMail.' AND `from` IN (0,2)) OR (`from`='.$uidMail.' AND `to` IN (0,2))) ORDER BY `time` DESC LIMIT '.(int)$start.','.(int)$max);
    } else {
      
$hidMail=(int)$ho['id'];
      
$q=db_query('SELECT * FROM `mail` WHERE ((`from`='.$uidMail.' AND `to`='.$hidMail.') OR (`to`='.$uidMail.' AND `from`='.$hidMail.')) ORDER BY `time` DESC LIMIT '.(int)$start.','.(int)$max);
    }
echo
'';
    while(
$row db_fetch_array($q)) {

      
$from in_array((int)$row['from'],[0,2],true) ? ['id'=>2,'login'=>'Система','r'=>'bot','online'=>time(),'access'=>0] : db_fetch_array(db_query('SELECT * FROM `users` WHERE `id`='.(int)$row['from'].' LIMIT 1'));
    echo 
'<div class='block_zero'><span style='floatrightcolor'.(($row['read'] == 0) ? '#90c090':'#909090').';'>'.date('d.m | H:i', $row['time']).'</span></span>'.($from['id'] != 2 ? '<img src='/images/icon/race/'.$from['r'].($from['online'] > time() - 300 ? '':'-off').'.png' alt='*'/> <a href='/user/'.$from['id'].'/'>'.$from['login'].'</a><br/>':'<img src='/images/icon/race/bot.png' alt="*"/> Система<br/>').''.($from['id'] !=  2 ? '<font color=''.$col[$from['access']].''>'.smiles(security_html($row['text'])).'</font>' : '<font color=#9DC8E7>'.game_system_text(smiles((string)$row['text']))).'</font></div><div class='dot-line'></div>';

  
if($row['to'] == $user['id'] && $row['read'] == 0db_query('UPDATE `mail` SET `read` = '1' WHERE `id` = ''.$row['id'].''');

    }
    echo 
'<div class='block_zero'>'.pages('/mail/'.$id.'/?').'</div>';

  }
  else
  {
  
    echo 
'<div class='block_zero'><font color='#909090'>Сообщений нет</font></div>';
  
  
}
?>
   <div class='mini-line'></div><div class='menuList'><li><a href='/forum/topic/525/'><img src='/images/icon/forum.png' alt=''/>Важно! Безопасность персонажа</a></li></div>

</div><?php if(!$isSystem): ?><center>
<?php
if(db_result(db_query('SELECT COUNT(*) FROM `blacklist` WHERE `user` = ''.$user['id'].'' AND `user2` = ''.$ho['id'].'''),0) == 0){
?>
<a class="btn" href="?the=act"><span class="end"><span class="label">В черный список</span></span></a>
<?php
}else{
echo 
"<a class='btn' href='?the=act2'><span class='end'><span class='label'>Убрать с игнора</span></span></a>";
}
?>
<?php
if(db_result(db_query('SELECT COUNT(*) FROM `friends` WHERE `user` = ''.$user['id'].'' AND `user2` = ''.$ho['id'].'''),0) == 0){
?>
<a class="btn" href="?the=act3"><span class="end"><span class="label">В друзья</span></span></a>
<?php
}else{
echo 
"<a class='btn' href='?the=act4'><span class='end'><span class='label'>Убрать с друзей</span></span></a>";
}
?></center><?php endif; ?>
<?php
  
include './system/f.php';

}
else
{
  
$title='Почта';
  include 
'./system/h.php';
  
$uid=(int)$user['id'];
  echo 
'<div class="main mail-ref">';
  
$sysCount=(int)db_result(db_query('SELECT COUNT(*) FROM `mail` WHERE `to`='.$uid.' AND `from` IN (0,2)'),0);
  if(
$sysCount){
    
$sysNew=(int)db_result(db_query('SELECT COUNT(*) FROM `mail` WHERE `to`='.$uid.' AND `from` IN (0,2) AND `read`=0'),0);
    
$last=db_fetch_array(db_query('SELECT `text` FROM `mail` WHERE `to`='.$uid.' AND `from` IN (0,2) ORDER BY `time` DESC,`id` DESC LIMIT 1'));
    echo 
'<a class="mail-row mail-system" href="/mail/system/"><img src="/images/icon/race/bot.png" alt=""/> Система'.($sysNew?'<b class="mail-new">+'.$sysNew.'</b>':'').'<span class="mail-preview">'.htmlspecialchars(mb_substr((string)($last['text']??''),0,38,'UTF-8'),ENT_QUOTES,'UTF-8').(mb_strlen((string)($last['text']??''),'UTF-8')>38?'...':'').'</span></a>';
  }
  
$threads=db_query('SELECT CASE WHEN `from`='.$uid.' THEN `to` ELSE `from` END peer,MAX(`time`) last_time FROM `mail` WHERE (`from`='.$uid.' OR `to`='.$uid.') AND `from` NOT IN(0,2) AND `to` NOT IN(0,2) GROUP BY peer ORDER BY MAX(CASE WHEN `to`='.$uid.' AND `read`=0 THEN 1 ELSE 0 END) DESC,last_time DESC LIMIT 100');
  while(
$r=db_fetch_array($threads)){
    
$peer=(int)($r['peer']??0); if($peer<=0||$peer===$uid) continue;
    
$ho=db_fetch_array(db_query('SELECT `id`,`login`,`level`,`r`,`online` FROM `users` WHERE `id`='.$peer.' LIMIT 1')); if(!$ho) continue;
    
$new=(int)db_result(db_query('SELECT COUNT(*) FROM `mail` WHERE `from`='.$peer.' AND `to`='.$uid.' AND `read`=0'),0);
    
$last=db_fetch_array(db_query('SELECT `text` FROM `mail` WHERE ((`from`='.$uid.' AND `to`='.$peer.') OR (`from`='.$peer.' AND `to`='.$uid.')) ORDER BY `time` DESC,`id` DESC LIMIT 1'));
    echo 
'<a class="mail-row" href="/mail/'.$peer.'/"><img src="/images/icon/race/'.(int)$ho['r'].(((int)$ho['online']>time()-300)?'':'-off').'.png" alt=""/> '.htmlspecialchars((string)$ho['login'],ENT_QUOTES,'UTF-8').', '.(int)$ho['level'].' ур.'.($new?'<b class="mail-new">+'.$new.'</b>':'').'<span class="mail-preview">'.htmlspecialchars(mb_substr((string)($last['text']??''),0,38,'UTF-8'),ENT_QUOTES,'UTF-8').(mb_strlen((string)($last['text']??''),'UTF-8')>38?'...':'').'</span></a>';
  }
  echo 
'<div class="mail-section">› <a href="/gifts/'.$uid.'/">Мои подарки</a></div><div class="mail-section">★ <a href="/mail/friends">Друзья</a> | <a href="/mail/blacklist">Чёрный список</a></div></div>';
  include 
'./system/f.php';

}

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