<?php

/**
 * @package     JohnCMS
 * @link        http://johncms.com
 * @copyright   Copyright (C) 2008-2011 JohnCMS Community
 * @license     LICENSE.txt (see attached file)
 * @version     VERSION.txt (see attached file)
 * @author      http://johncms.com/about
 */

defined('_IN_JOHNCMS') or die('Error: restricted access');

$out = '';
$ch = 0;
$mod = isset($_REQUEST['mod']) ? $_REQUEST['mod'] : '';
if ($id) {
    $req = mysql_query("SELECT * FROM `users` WHERE `id` = '$id' LIMIT 1;");
    if (mysql_num_rows($req) == 0) {
        $textl = 'Личная почта';
        require_once('../incfiles/head.php');
        echo display_error('Такого пользователя не существует');
        require_once("../incfiles/end.php");
        exit;
    }
    $qs = mysql_fetch_assoc($req);
    if ($mod == 'clear') {
        $textl = 'Личная почта';
        require_once('../incfiles/head.php');

        if (isset($_POST['clear'])) {
            $count_message = mysql_result(mysql_query("SELECT COUNT(*) FROM `cms_mail` WHERE ((`user_id`='$id' AND `from_id`='$user_id') OR (`user_id`='$user_id' AND `from_id`='$id')) AND `delete`!='$user_id';"), 0);
            if ($count_message) {
                $req = mysql_query("SELECT `cms_mail`.* FROM `cms_mail` WHERE ((`cms_mail`.`user_id`='$id' AND `cms_mail`.`from_id`='$user_id') OR (`cms_mail`.`user_id`='$user_id' AND `cms_mail`.`from_id`='$id')) AND `cms_mail`.`delete`!='$user_id' LIMIT "
                    . $count_message);
                while (($row = mysql_fetch_assoc($req)) !== false) {
                    if ($row['delete']) {
                        if ($row['file_name']) {
                            if (file_exists('../files/mail/' . $row['file_name']) !== false)
                                @unlink('../files/mail/' . $row['file_name']);
                        }
                        mysql_query("DELETE FROM `cms_mail` WHERE `id`='{$row['id']}' LIMIT 1");
                        mysql_query("OPTIMIZE TABLE `cms_mail`");
                    } else {
                        if ($row['read'] == 0 && $row['user_id'] == $user_id) {
                            if ($row['file_name']) {
                                if (file_exists('../files/mail/' . $row['file_name']) !== false)
                                    @unlink('../files/mail/' . $row['file_name']);
                            }
                            mysql_query("DELETE FROM `cms_mail` WHERE `id`='{$row['id']}' LIMIT 1");
                            mysql_query("OPTIMIZE TABLE `cms_mail`");
                        } else {
                            mysql_query("UPDATE `cms_mail` SET `delete` = '" . $user_id . "' WHERE `id` = '" . $row['id'] . "' LIMIT 1");
                        }
                    }
                }
            }
            echo '<div class="gmenu">Сообщения удалены</div>';
        } else {
            echo '
			<div class="rmenu">Подтвердите удаление сообщений</div>
			<div class="gmenu">
			<form action="index.php?act=write&amp;mod=clear&amp;id=' . $id . '" method="post"><div>
			<input type="submit" name="clear" value="Удалить"/>
			</div></form>
			</div>';
        }
        echo '<div class="menu"><a href="index.php?act=write&amp;id=' . $id . '">Назад</a></div>';
        echo '<div class="menu"><a href="../index.php?act=cab">В кабинет</a></div>';
        require_once("../incfiles/end.php");
        exit;
    }
}

if (empty($_SESSION['error']))
    $_SESSION['error'] = '';
$out .= '<div class="phdr"><h3>' . ($id ? 'Личная переписка с ' . $qs['name'] : 'Отправка сообщения') . '</h3></div>';
if (isset($_POST['submit']) && empty($ban['1']) && empty($ban['3'])) {

    if (!$id)
        $name = isset($_POST['nick']) ? rus_lat(mb_strtolower($_POST['nick'])) : '';
    $text = isset($_POST['text']) ? trim($_POST['text']) : '';
    $newfile = '';
    $sizefile = '';
    $do_file = false;
    $do_file_mini = false;

    $error = array();

    if (!$id && empty($name))
        $error[] = 'Укажите логин получателя';
    if (empty($text))
        $error[] = 'Собщение не может быть пустым';
    elseif (mb_strlen($text) < 2 || mb_strlen($text) > 5000)
        $error[] = 'Недопустимая длина сообщения. (Мин. 2 Мах. 5000 символов)<br />';
    if (($id && $id == $user_id) || !$id && $datauser['name_lat'] == $name)
        $error[] = 'Самому себе нельзя отправлять сообщения';
    $flood = antiflood();
    if ($flood)
        $error[] = 'Вы не можете так часто добавлять сообщения<br />Пожалуйста, подождите ' . $flood . ' сек.';
    if (empty($error)) {
        if (!$id) {
            $query = mysql_query("SELECT * FROM `users` WHERE `name_lat`='" . mysql_real_escape_string($name) . "' LIMIT 1;");
            if (mysql_num_rows($query) == 0) {
                $error[] = 'Пользователя не существует';
            } else {
                $user = mysql_fetch_assoc($query);
                $id = $user['id'];
            }
        }

    }

    function parseFileName($var = '')
    {
        if (empty($var))
            return false;
        $file_ext = pathinfo($var, PATHINFO_EXTENSION);
        $file_body = mb_substr($var, 0, mb_strripos($var, '.'));
        $info['filename'] = mb_strtolower(mb_substr(str_replace('.', '_', $file_body), 0, 38));
        $info['fileext'] = mb_strtolower($file_ext);
        return $info;
    }

    $info = array();
    if (isset($_FILES['fail']['size']) && $_FILES['fail']['size'] > 0) {
        $do_file = true;
        $fname = $_FILES['fail']['name'];
        $fsize = $_FILES['fail']['size'];
        if (!empty($_FILES['fail']['error']))
            $error[] = 'Ошибка при загрузке файла!';

    } else if (isset($_POST['fail']) && mb_strlen($_POST['fail']) > 0) {
        $do_file_mini = true;
        $array = explode('file=', $_POST['fail']);
        $fname = mb_strtolower($array[0]);
        $filebase64 = $array[1];
        $fsize = strlen(base64_decode($filebase64));
        if (empty($fsize))
            $error[] = 'Ошибка при загрузке файла!';
    }

    if (empty($error) && ($do_file || $do_file_mini)) {
        // Файлы Windows
        $ext_win = array(
            'exe',
            'msi'
        );
        // Файлы Java
        $ext_java = array(
            'jar',
            'jad'
        );
        // Файлы SIS
        $ext_sis = array(
            'sis',
            'sisx'
        );
        // Файлы документов и тексты
        $ext_doc = array(
            'txt',
            'pdf',
            'doc',
            'rtf',
            'djvu',
            'xls'
        );
        // Файлы картинок
        $ext_pic = array(
            'jpg',
            'jpeg',
            'gif',
            'png',
            'bmp',
            'wmf'
        );
        // Файлы архивов
        $ext_zip = array(
            'zip',
            'rar',
            '7z',
            'tar',
            'gz'
        );
        // Файлы видео
        $ext_video = array(
            '3gp',
            'avi',
            'flv',
            'mpeg',
            'mp4'
        );
        // Звуковые файлы
        $ext_audio = array(
            'mp3',
            'amr'
        );
        $ext = array_merge($ext_win, $ext_java, $ext_sis, $ext_doc, $ext_pic, $ext_zip, $ext_video, $ext_audio);
        $info = parseFileName($fname);
        if (empty($info['filename']))
            $error[] = 'Запрещается загружать файлы без имени!';
        if (empty($info['fileext']))
            $error[] = 'Запрещается загружать файлы без расширения!';
        if ($fsize > (1024 * $flsz))
            $error[] = 'Размер загружаемого файла превышает максимально допустимый!';
        if (preg_match("/[^a-z0-9.()+_-]/", $info['filename']))
            $error[] = 'В названии файла присутствуют недопустимые символы.<br />Разрешены только латинские символы, цифры и некоторые знаки ( .()+_- )<br />Запрещены пробелы.';
        if (!in_array($info['fileext'], $ext))
            $error[] = 'Запрещенный тип файла! К отправке разрешены только файлы, имеющие следующее расширение: ' . implode(', ', $ext);
        $newfile = $info['filename'] . '.' . $info['fileext'];
        $sizefile = $fsize;
    }

    if (empty($error)) {
        $ignor = mysql_result(mysql_query("SELECT COUNT(*) FROM `cms_contact`
		WHERE `user_id`='" . $user_id . "'
		AND `from_id`='" . $id . "'
		AND `ban`='1';"), 0);
        if ($ignor)
            $error[] = 'Пользователь у Вас в игноре. Отправка сообщения не возможна.';
        if (empty($error)) {
            $ignor_m = mysql_result(mysql_query("SELECT COUNT(*) FROM `cms_contact`
			WHERE `user_id`='" . $id . "'
			AND `from_id`='" . $user_id . "'
			AND `ban`='1';"), 0);
            if ($ignor_m)
                $error[] = 'Пользователь добаил Вас в игнор. Отправка сообщения не возможна.';
        }
    }

    if (empty($error)) {

        $q = mysql_query("SELECT * FROM `cms_contact`
		WHERE `user_id`='" . $user_id . "' AND `from_id`='" . $id . "';");
        if (mysql_num_rows($q) == 0) {
            mysql_query("INSERT INTO `cms_contact` SET
			`user_id` = '" . $user_id . "',
			`from_id` = '" . $id . "',
			`time` = '" . time() . "';");
            $ch = 1;
        }
        $q1 = mysql_query("SELECT * FROM `cms_contact`
		WHERE `user_id`='" . $id . "' AND `from_id`='" . $user_id . "';");
        if (mysql_num_rows($q1) == 0) {
            mysql_query("INSERT INTO `cms_contact` SET
			`user_id` = '" . $id . "',
			`from_id` = '" . $user_id . "',
			`time` = '" . time() . "';");
            $ch = 1;
        }

    }

    // Проверка наличия файла с таким же именем
    if (!empty($newfile) && file_exists('../files/mail/' . $newfile) !== false) {
        $newfile = $realtime . $newfile;
    }

    if (empty($error) && $do_file) {
        if ((move_uploaded_file($_FILES['fail']['tmp_name'], '../files/mail/' . $newfile)) === true) {
            @ chmod('../files/mail/' . $newfile, 0666);
            @unlink($_FILES['fail']['tmp_name']);
        } else {
            $error[] = 'Ошибка прикрепления файла.<br/>';
        }
    }

    if (empty($error) && $do_file_mini) {
        if (strlen($filebase64) > 0) {
            $FileName = '../files/mail/' . $newfile;
            $filedata = base64_decode($filebase64);
            $fid = @fopen($FileName, "wb");
            if ($fid) {
                if (flock($fid, LOCK_EX)) {
                    fwrite($fid, $filedata);
                    flock($fid, LOCK_UN);
                }
                fclose($fid);
            }
            if (file_exists($FileName) && filesize($FileName) == strlen($filedata)) {
                @ chmod($FileName, 0666);
                unset($FileName);
            } else {
                $error[] = 'Не известная ошибка при загрузке!';
            }
        } else {
            $error[] = 'Ошибка при загрузке файла!';
        }
    }

    if (empty($error)) {
        mysql_query("INSERT INTO `cms_mail` SET
		`user_id` = '" . $user_id . "',
		`from_id` = '" . $id . "',
		`text` = '" . mysql_real_escape_string($text) . "',
		`time` = '" . time() . "',
		`file_name` = '" . $newfile . "',
		`size` = '" . $sizefile . "';");
        mysql_query("UPDATE `users` SET `lastpost` = '" . time() . "' WHERE `id` = '$user_id';");
        if ($ch == 0) {
            mysql_query("UPDATE `cms_contact` SET `time` = '" . time() . "' WHERE `user_id` = '" . $user_id . "' AND
			`from_id` = '" . $id . "';");
            mysql_query("UPDATE `cms_contact` SET `time` = '" . time() . "' WHERE `user_id` = '" . $id . "' AND
			`from_id` = '" . $user_id . "';");
        }
        $_SESSION['error'] = '<div class="gmenu">Сообщение отправлено</div>';
        Header('Location: index.php?act=write' . ($id ? '&id=' . $id : ''));
        exit;
    } else {
        $out .= '<div class="rmenu">' . implode('<br />', $error) . '</div>';
    }
}

if (empty($ban['1']) && empty($ban['3'])) {
    $out .= $_SESSION['error'];
    $out .= '<div class="gmenu">
	<form action="index.php?act=write' . ($id ? '&amp;id=' . $id : '') . '" method="post"  enctype="multipart/form-data"><div>
	' . ($id ? '' : '<b>Кому:</b><br/>
	<input type="text" name="nick" maxlength="15" value="' . (!empty($_POST['nick']) ? check($_POST['nick']) : '') . '" /><br />') . '
	<b>Сообщение:</b><br/>
	<textarea rows="3" name="text">' . (!empty($_POST['text']) ? htmlentities($_POST['text'], ENT_QUOTES, 'UTF-8') : '') . '</textarea>
	<br /><span style="font-size: x-small;">Мин. 2 Мах. 5000 символов</span><p>
	Файл:<br />';
    if (stristr($agn, 'Opera/8.01') && stristr($agn, 'Opera Mini/2')) {
        $out .= '<input name="fail1" value =""/>&#160;<br/><a href="op:fileselect">Выбрать файл</a>';
    } else {
        $out .= '<input type="file" name="fail"/>';
    }
    $out .= '
	<br /><span style="font-size: x-small;">Максимальный размер: ' . formatsize(1024 * $flsz) . '</span>
	</p><input type="submit" name="submit" value="Отправить"/>
	</div></form>
	</div>';
} else {
    $out .= '<div class="rmenu">Учетная запись заблокированна! Вы не можете отправлять сообщения.</div>';
}
if ($id) {
    $total = mysql_result(mysql_query("SELECT COUNT(*) FROM `cms_mail` WHERE ((`user_id`='$id' AND `from_id`='$user_id') OR (`user_id`='$user_id' AND `from_id`='$id')) AND `delete`!='$user_id';"), 0);
    if ($total) {
        $req = mysql_query("SELECT `cms_mail`.*, `cms_mail`.`id` as `mid`, `cms_mail`.`time` as `mtime`, `users`.* FROM `cms_mail` LEFT JOIN `users` ON `cms_mail`.`user_id`=`users`.`id` WHERE ((`cms_mail`.`user_id`='$id' AND `cms_mail`.`from_id`='$user_id') OR (`cms_mail`.`user_id`='$user_id' AND `cms_mail`.`from_id`='$id')) AND `cms_mail`.`delete`!='$user_id' ORDER BY `cms_mail`.`time` DESC LIMIT "
            . $start . "," . $kmess);
        $i = 1;
        $mass_read = array();
        while (($row = mysql_fetch_assoc($req)) !== false) {
            $out .= $i % 2 ? '<div class="list1">' : '<div class="list2">';
            if ($row['read'] == 0 && $row['from_id'] == $user_id)
                $mass_read[] = $row['mid'];
            $vrp1 = date("d.m.Y / H:i", $row['mtime'] + $set_user['sdvig'] * 3600);
            $post = $row['text'];
            $post = checkout($post, 1, 1);
            if ($set_user['smileys'])
                $post = smileys($post, $row['rights'] >= 1 ? 1 : 0);
            if ($row['file_name'])
                $post .= '<div class="func">Файл: <a href="index.php?act=load&amp;id=' . $row['mid'] . '">' . $row['file_name'] . '</a> (' . formatsize($row['size']) . ')(' . $row['count'] . ')</div>';
            $subtext = '<a href="index.php?act=delete&amp;id=' . $row['mid'] . '">Удалить</a>';
            $out .= show_user($row, 1, ($rights >= 6 && $rights >= $row['rights'] ? 1 : 0), $vrp1, $post, $subtext);
            $out .= '</div>';
            ++$i;
        }
        //Ставим метку о прочтении
        if ($mass_read) {
            $result = implode(',', $mass_read);
            mysql_query("UPDATE `cms_mail` SET `read`='1' WHERE `from_id`='$user_id' AND `id` IN (" . $result . ")");
        }
        $out .= '<div class="phdr">Всего: ' . $total . '</div>';
        if ($total > $kmess) {
            $out .= '<p>' . pagenav('index.php?act=write&amp;id=' . $id . '&amp;', $start, $total, $kmess) . '</p>';
            $out .= '<p><form action="index.php" method="get">
			<input type="hidden" name="act" value="write"/>
			<input type="hidden" name="id" value="' . $id . '"/>
			<input type="text" name="page" size="2"/>
			<input type="submit" value="К странице &gt;&gt;"/></form></p>';
        }
        $out .= '<div class="menu"><a href="index.php?act=write&amp;mod=clear&amp;id=' . $id . '">Очистить сообщения</a></div>';
    } else {
        $out .= '<div class="rmenu">Сообщений нет</div>';
    }
}

$out .= '<div class="menu"><a href="index.php">В контакты</a></div>';
$out .= '<div class="menu"><a href="../index.php?act=cab">В кабинет</a></div>';
$textl = 'Личная почта';
require_once('../incfiles/head.php');
echo $out;
unset($_SESSION['error']);