<?
echo '<div class="col-md-8 col-sm-12 col-xs-12"><div class="panel panel-default">';
echo '<div class="panel-heading"> <b>Написать сообщение</b></div>
<div class="panel-body">';
// Определяем диалог
$dialog = isset ($_REQUEST['dialog']) ? func::checkin($_REQUEST['dialog']) : false;
$resud = core:: $db -> queryFetch("SELECT * FROM `messages` WHERE `id`=?", array($dialog));
if (!empty($dialog) && !isset($resud['id'])){
func::errors('<b>Такого диалога нет!</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
}
if (empty($act)){
if (empty($dialog)){
// проверяем есть ли диалог между 2 пользователями и выбираем данные из таблы
$resu = core:: $db -> queryFetch("SELECT * FROM `messages` WHERE (`users` = ? or `users` = ?) and `cols`=?", array("::".core::$user['id']."::".user::user_inf($nk)."::","::".user::user_inf($nk)."::".core::$user['id']."::",2));
if (isset($resu['id'])){
// Провееряем не покидал ли юзер этот диалог
$ruse1 = core:: $db -> queryFetch("SELECT * FROM `mess_users` WHERE `user_id`=? and `dialog`=?", array(core::$user['id'],$resu['id']));
if ($ruse1['aut']==1){
// Если покидал, снова даем ему доступ
$dbi = core::$db -> prepare("UPDATE `mess_users` SET `aut`=? WHERE `user_id`=? and `dialog`=?");
$dbi -> execute(0,core::$user['id'],$resu['id']);
}
// Провееряем не покидал ли аппонент этот диалог
$ruse2 = core:: $db -> queryFetch("SELECT * FROM `mess_users` WHERE `user_id`=? and `dialog`=?", array(user::user_inf($nk),$resu['id']));
if ($ruse2['aut']==1){
// Если покидал, снова даем ему доступ
$dbi = core::$db -> prepare("UPDATE `mess_users` SET `aut`=? WHERE `user_id`=? and `dialog`=?");
$dbi -> execute(0,user::user_inf($nk),$resu['id']);
}
/*Задаем правила сортировки переадресации на страницу диалога */
$order = core::$user['p_sort'] ? 'end' : '1';
// Переадресуем в диалог
header ('Location: messages.php?mod=dialog&dialog='.$resu['id'].'&page='.$order.'&'.SID);
}
echo '<form action="?mod=add&act=act&'.SID.'" method="post" name="form" enctype="multipart/form-data">';
echo "Кому (Ник/ID):<br /><input name='nk' maxlength='15' value='$nk' title='komu'/><br/>\n";
}else{
// Проверка на участие в диалоге
$mess_users = core::$db->query("SELECT * FROM `mess_users` WHERE `dialog`=? and `user_id`=? and `aut`=?", array($dialog,core::$user['id'],0));
if ($mess_users->fetchColumn() == 0)func::errors('<b>Вы не участвуете в этом диалоге</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
echo '<a href="?" class="href">Диалоги</a> | <b><a href="?mod=dialog&dialog='.$dialog.'" class="href">Диалог</a> с</b> ';
$read = core::$db->query("SELECT * FROM `mess_users` WHERE `dialog`=? and `user_id`!=?", array($dialog,core::$user['id']));
while ($r = $read -> fetch()) {
$k = $k++;
echo user::nik($r['user_id']).(($k>1) ? ', ' : '');
}
echo '<dt></dt><br />';
}
echo 'Сообщение:<br /><textarea cols="'.core::$user['pole2'].'" rows="'.core::$user['pole1'].'" name="msg">'.bbcode::br($_SESSION['msg']).'</textarea><br/>';
if (core::$user['bbpnel']==1 || (core::$user['bbpnel']==2 && func::is_mobile()==0)){
echo $div3;
func::quickpaste('msg');
echo $div9;
}
echo "Прикрепить файл: (<a href='".H."PAGES/help.php?filepr'>?</a>)<br/><input type='file' name='fail'/><br /> ";
echo '<br /><input type="submit" class="ibutton" value="Написать"/></form><br /><br />';
unset($_SESSION['msg']);
}else{
$reg_kod = isset($_POST['kod']) ? func::checkin($_POST['kod']) : '';
$msg = func::checkin($_POST['msg']);
// Проверка на спам
$old = (core::$level > core::$set['lev_min']) ? core::$set['sek_min'] : core::$set['sek_max'];
$query = @mysql_query("SELECT * FROM `mess_out` WHERE `user_id` = '".core::$user['id']."' AND `time` > '".(core::$realtime-$old)."';");
$query = core::$db->query("Select * FROM `mess_dialog` WHERE `user_id`=? and `dialog`=? and `time`>?", array(core::$user['id'],$dialog,(core::$realtime-$old)));
if ($query->fetchColumn() > 0){
func::spamer_on('',$old);
func::errors('<b>Вы не можете так часто писать<br/>Порог '.$old.' секунд</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
}
// Проверка постов
if (core::$user[core::$set['posts_act']]<core::$set['posts_pr'])func::errors('<b>Чтобы писать записки, нужно набрать '.core::$set['posts_pr'].' постов форума!</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
// Ввод сообщения
if (func::utf_strlen($msg)==0)func::errors('<b>Пустое сообщение!</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
$fail = 0;
$fails = 0;
// Обработка файла (если есть)
if ($_FILES['fail']['size'] > 0){
func::disk_limit($_FILES['fail']['size']);
$fname = strtolower($_FILES['fail']['name']);
$fnames=$_FILES['fail']['name'];
$fsize = $_FILES['fail']['size'];
// Список допустимых расширений файлов.
$al_ext = array('rar', 'zip', 'pdf', 'txt', 'tar', 'gz', 'jpg', 'jpeg', 'gif', 'png', 'bmp', '3gp', 'mp3', 'mpg', 'sis', 'thm', 'jar', 'jad', 'cab', 'sis', 'sisx', 'exe', 'msi');
$ext = explode(".", $fname);
// Проверка на допустимый размер файла
if ($fsize >= 1024 * core::$set['flsz_pr'])func::errors('Вес файла превышает <b>'.core::$set['flsz_pr'].'</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
if ((preg_match("/.php/i", $fnames)) or (preg_match("/.pl/i", $fnames)) or ($fnames == ".htaccess"))func::errors('<b>Файлы такого типа запрещены!</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
// Проверка файла на наличие только одного расширения
if (count($ext) != 2)func::errors('<b>Запрещены файлы не имеющие имени, расширения, или с двойным расширением.</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
// Проверка допустимых расширений файлов
if (!in_array($ext[1], $al_ext))func::errors('Запрещенный тип файла!<br />К отправке разрешены только файлы, имеющие следующее расширение:<br /><b>'.implode(', ', $al_ext).'</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
// Проверка на длину имени
if (strlen($fname) > 30)func::errors('<b>Длина названия файла не должна превышать 30 символов!</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
// Проверка на запрещенные символы
if (eregi("[^a-z0-9.()+_-]", $fname))func::errors('В названии файла "<b>' . $fname . '</b>" присутствуют недопустимые символы.<br />Разрешены только латинские символы, цифры и некоторые знаки ( .()+_- )<br />Запрещены пробелы.<br />', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
// Проверка наличия файла с таким же именем
if (file_exists(H."sites/".core::$site['domain']."/modul_files/privat/$fname")) {
$fname = core::$realtime.'_'.$fname;
}
if ((move_uploaded_file($_FILES["fail"]["tmp_name"], H."sites/".core::$site['domain']."/modul_files/privat/$fname")) == true) {
//echo 'Файл прикреплен!<br/>';
$fail = H."sites/".core::$site['domain']."/modul_files/privat/$fname";
$fails = $fsize;
}else {
func::errors('<b>Ошибка отправки файла.</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');;
}
}
// Если пишем пользователю не из диалога
if(!empty($nk) && empty($dialog)){
// проверка на существование юзера
if (!user::user_inf($nk))func::errors('<b>Такого пользователя нет!</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
// попытки написать себе
if (user::user_inf($nk) == core::$user['id'])func::errors('<b>Себе пишешь?</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
if (user::ignor(user::user_inf($nk),core::$user['id']))func::errors('<b>Вы не можете писать этому пользователю, т.к. он отправил вас в игнор.</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
// проверяем есть ли диалог между 2 пользователями и выбираем данные из таблы
$resu = core:: $db -> queryFetch("SELECT * FROM `messages` WHERE (`users` = ? or `users` = ?) and `cols`=?", array("::".core::$user['id']."::".user::user_inf($nk)."::","::".user::user_inf($nk)."::".core::$user['id']."::",2));
// Провееряем не покидал ли юзер этот диалог
$ruse1 = core:: $db -> queryFetch("SELECT * FROM `mess_users` WHERE `user_id`=? and `dialog`=?", array(core::$user['id'],$resu['id']));
if ($ruse1['aut']==1){
// Если покидал, снова даем ему доступ
$dbi = core::$db -> prepare("UPDATE `mess_users` SET `aut`=? WHERE `user_id`=? and `dialog`=?");
$dbi -> execute(0,core::$user['id'],$resu['id']);
}
// Провееряем не покидал ли аппонент этот диалог
$ruse2 = core:: $db -> queryFetch("SELECT * FROM `mess_users` WHERE `user_id`=? and `dialog`=?", array(user::user_inf($nk),$resu['id']));
if ($ruse2['aut']==1){
// Если покидал, снова даем ему доступ
$dbi = core::$db -> prepare("UPDATE `mess_users` SET `aut`=? WHERE `user_id`=? and `dialog`=?");
$dbi -> execute(0,user::user_inf($nk),$resu['id']);
}
// если пишем из диалога
}elseif(!empty($dialog)){
// проверяем есть ли диалог и выбираем данные из таблы
$resu = core:: $db -> queryFetch("SELECT * FROM `messages` WHERE `id`=?", array($dialog));
if (!isset($resu['id'])){
func::errors('<b>Такого диалога нет!</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
}
// если диалог между двумя проверяем не покидал ли 2 диалог
if ($resu['cols']==2){
// Провееряем не покидал ли юзер этот диалог
$ruse1 = core:: $db -> queryFetch("SELECT * FROM `mess_users` WHERE `user_id`!=? and `dialog`=?", array(core::$user['id'],$resu['id']));
if ($ruse1['aut']==1){
// Если покидал, снова даем ему доступ
$dbi = core::$db -> prepare("UPDATE `mess_users` SET `aut`=? WHERE `user_id`!=? and `dialog`=?");
$dbi -> execute(0,core::$user['id'],$resu['id']);
}
// проверка на существование юзера
if (!user::user_inf($ruse1['user_id']))func::errors('<b>Такого пользователя нет!</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
// попытки написать себе
if (user::user_inf($ruse1['user_id']) == core::$user['id'])func::errors('<b>Себе пишешь?</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
// Игнор
if (user::ignor(user::user_inf($ruse1['user_id']),core::$user['id']))func::errors('<b>Вы не можете писать этому пользователю, т.к. он отправил вас в игнор.</b>', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
}
// если нет пользователя и диалога выводим ошибку
}else func::errors('<b>Ошибка!</b><br />Сообщите администрации', '<a href="'.getenv("HTTP_REFERER").'" class="href">Вернуться</a>');
// если диалог не найден
if (!isset($resu['id'])){
// создаем диалог между 2 пользователями
$dbi = core::$db -> prepare("INSERT INTO `messages` SET `users`=?, `time`=?, `cols`=?");
$dbi -> execute("::".core::$user['id']."::".user::user_inf($nk)."::",core::$realtime,2);
// определяем ID созданного диалога
$dialog = core::$db -> lastInsertId();
// Получаем данные созданного диалога
$resu = core:: $db -> queryFetch("SELECT * FROM `messages` WHERE `id` = '" . $dialog . "'");
// Записываем пользователей которым доступен этот диалог
$dbi = core::$db -> prepare("INSERT INTO `mess_users` SET `user_id`=?, `dialog`=?");
$dbi -> execute(core::$user['id'],$dialog);
$dbi -> execute(user::user_inf($nk),$dialog);
// если диалог найден
}else{
// определяем ID диалога
$dialog = $resu['id'];
// изменяем время диалога
$dbi = core::$db -> prepare("UPDATE `messages` SET `time`=? WHERE `id`=?");
$dbi -> execute(core::$realtime,$dialog);
}
// Создаем сообщение
$dbi = core::$db -> prepare("INSERT INTO `mess_dialog` SET `user_id`=?, `users`=?, `time`=?, `msg`=?, `fail`=?, `fails`=?, `dialog`=?");
$dbi -> execute(core::$user['id'],$resu['users'],core::$realtime,$msg,$fail,$fails,$dialog);
// Определяем ид сообщения
$mess_id = core::$db -> lastInsertId();
//Выводим пользователей участвующих в диалоге, кроме того кто пишет сообщение
$read = core::$db->query("SELECT * FROM `mess_users` WHERE `dialog`=? and `user_id`!=? and `aut`!=?", array($dialog,core::$user['id'],1));
// Делаем запись в таблицу непрочтенных сообщений
while ($a = $read -> fetch()) {
$dbi = core::$db -> prepare("INSERT INTO `mess_read` SET `user_id`=?, `mess_id`=?, `dialog`=?");
$dbi -> execute($a['user_id'],$mess_id,$dialog);
}
echo 'Сообщение для <b>'.user::user_inf($nk,'user').'</b> отправлено!<br />';
/*Задаем правила сортировки переадресации на страницу диалога */
$order = core::$user['p_sort'] ? 'end' : '1';
header ('Location: messages.php?mod=dialog&dialog='.$dialog.'&page='.$order.'&'.SID);
/*if(user::user_inf($nk,'avtootvet')!=NULL){
echo '<p>Автоответчик: '.user::user_inf($nk,'avtootvet').'</p>';
}*/
}
echo '</div></div>';
?>