<?php

# заголовок
define('TITLE', 'Почта');

# определение данных
$params = PARAMS; $page = 1; // получение параметров
$empty = false; $dialog = false; $drudge = false; // данные по умолчанию
$refresh = $FUNC->random(8, true); // случайное число

####################
####################

# жалоба на диалог
if (isset($params['grudge']) && isset($params['token']) && $params['token'] == TOKEN) {
$nickname = $USER->nick($params['grudge'], true); // преобразование ника

# фильтрация ника
$nick = $FUNC->filter($nickname, 'sql');

# проверка на возможность жалобы, обработка данных
if (db_exist($DB, 'users', 'id', array('nick' => $nick)) && USER['nick'] != $nick) {
$buddy = db_output($DB, 'users', 'id', array('nick' => $nick)); if (db_exist($DB, // данные собеседника
'dialogs', 'id', array('author' => USER['id'], 'reply' => $buddy['id']))) { db_update($DB, 'dialogs', 
array('view' => 'yes'), array('author' => USER['id'], 'reply' => $buddy['id'])); } } }  // просмотр диалога

####################

# просмотрен диалог
if (isset($params['viewed']) && isset($params['token']) && 
$params['token'] == TOKEN && USER['status'] == 'admin') {

# идентификатор сообщения
$id = $FUNC->filter($params['viewed'], 'int');

# проверка диалога, обработка данных
if (db_exist($DB, 'dialogs', 'id', array('id' => $id, 'view' => 'yes'))) { 
db_update($DB, 'dialogs', array('view' => 'no'), array('id' => $id)); } }

####################

# просмотр диалога
if (isset($params['viewer']) && isset($params['token']) && 
$params['token'] == TOKEN && USER['status'] == 'admin') {

# идентификатор сообщения
$id = $FUNC->filter($params['viewer'], 'int');

# блокировка пользователя, фильтрация идентификатора
if (isset($params['block'])) { $lock = $FUNC->filter($params['block'], 'int');
if (db_exist($DB, 'users', 'id', array('id' => $lock))) db_update($DB, 'settings', 
array('mail' => 'no'), array('id' => $lock)); }

# проверка на возможность просмотра диалога, обработка данных
if (db_exist($DB, 'dialogs', 'id', array('id' => $id, 'view' => 'yes'))) { $drudge = true;
$duolog = db_output($DB, 'dialogs', 'id', array('id' => $id, 'view' => 'yes')); } } // вывод диалога

####################

# удаление диалога
if (isset($params['delete']) && isset($params['token']) && $params['token'] == TOKEN) {
$nickname = $USER->nick($params['delete'], true); // преобразование ника

# фильтрация ника
$nick = $FUNC->filter($nickname, 'sql');

# проверка на возможность удаления, обработка данных
if (db_exist($DB, 'users', 'id', array('nick' => $nick)) && USER['nick'] != $nick) {
$buddy = db_output($DB, 'users', 'id', array('nick' => $nick)); // данные собеседника
if (db_exist($DB, 'dialogs', 'id', array('author' => USER['id'], 'reply' => $buddy['id']))) {
$del = db_output($DB, 'dialogs', 'id', array('author' => USER['id'], 'reply' => $buddy['id'])); // данные диалога
db_delete($DB, 'dialogs', array('id' => $del['id'])); db_delete($DB, 'mail', array('dialog' => $del['id'])); } } } // удаление данных

####################

# открытие диалога, преобразование ника
if (isset($params['dialog'])) { $nickname = $USER->nick($params['dialog'], true);

# обработка данных
$nick = $FUNC->filter($nickname, 'sql'); // фильтрация
$nicked = $USER->nick($params['dialog']); // обработка для ссылок

# проверка на возможность диалога, обработка данных
if (db_exist($DB, 'users', 'id', array('nick' => $nick)) && USER['nick'] != $nick) { $dialog = true;
$buddy = db_output($DB, 'users', array('id','nick', 'sex'), array('nick' => $nick)); // данные собеседника
$setup = db_output($DB, 'settings', array('contact','mail'), array('id' => $buddy['id'])); } } // настройки собеседника

####################
####################

# проверка наличия, вывод текущего диалога
if ($dialog) { if (!db_exist($DB, 'dialogs', 'id', array('author' => USER['id'], 'reply' => $buddy['id']))) $empty = true; 
else { $dialogue = db_output($DB, 'dialogs', array('id', 'view'), array('author' => USER['id'], // вывод диалога
'reply' => $buddy['id'])); db_update($DB, 'dialogs', array('open' => 'yes'), array ('id' => $dialogue['id'])); // отметка о просмотре

# работа с данными, из базы данных
$msg = db_count($DB, 'mail', 'id', array('dialog' => $dialogue['id'])); $pages = ceil($msg / DATA['mail']); if ($pages > 5) $pages = 5; // страницы
if (isset($params['page'])) { $page = $FUNC->filter($params['page'], 'int'); if ($page > $pages) $page = $pages; // проверка навигации
elseif ($page < 1) $page = 1; } else $page = 1; $offset = ($page * DATA['mail']) - DATA['mail']; $query = db_output($DB, // определение смещения
'mail', array('text', 'time', 'user'), array('dialog' => $dialogue['id']), true, 'id', DATA['mail'], $offset, 'DESC'); // вывод сообщений из базы
$one = ($pages == 2) ? '<' : 1; $two = ($pages == 2) ? '>' : 2; $delete = true; // навигация, удаление контакта

# разбор диалога, переработка данных в массиве
$index = 0; while ($assoc = $query->fetch_assoc()) {
$mail[$index] = $assoc; $index++; }

# обработка данных
foreach ($mail as &$post) { $user = db_output($DB, 'users', array('id', 'nick', 'sex', 'visit'), array('id' => $post['user'])); // данные автора
$post['nick'] = $user['nick']; $post['sex'] = $user['sex']; $post['text'] = $GAME->message($post['text']); // имя, пол
$post['visit'] = (time() < ($user['visit'] + DATA['online'])) ? 'green' : 'gray'; $post['time'] = // визит, онлайн
($post['time'] == time()) ? 'только что' : $USER->when($post['time'], true) .' назад'; } } // сообщение, время

# стилизация, возможность на отправку сообщение, проверка списков
$ignore = (!db_exist($DB, 'contacts', 'id', array('type' => 'ignore', 'user' => $buddy['id'], 'whom' => USER['id']))) ? true : false; // черный список
if ($setup['contact'] == 'mate') $friend = (db_exist($DB, 'contacts', 'id', array('type' => 'friend', 'user' => $buddy['id'], 'whom' => USER['id']))) ? true : false; // друзья
else $friend = true; $form = (SETUP['mail'] == 'yes' && $setup['mail'] == 'yes' && $ignore && $friend) ? true : false; if (isset($dialogue))  // возможность отправки
$claim = ($dialogue['view'] == 'no') ? true : false; if (SETUP['mail'] == 'no') $ban = 'Вам закрыт доступ к почте.'; elseif ($setup['mail'] == 'no') // блокировка
$ban = 'Собеседнику заблокирована почта.'; elseif (!$friend) $ban = 'Игроку могут писать только друзья.'; else $ban = 'Игрок добавил Вас в черный список.'; } // уведомление

####################

# просмотр жалобы, вывод диалога
elseif ($drudge) { if (!db_exist($DB, 'dialogs', 'id', array('id' => $duolog['id'], 'view' => 'yes'))) $empty = true; 
else { $dialogue = db_output($DB, 'dialogs', array('id', 'author', 'reply'), array('id' => $duolog['id'], 'view' => 'yes')); // вывод диалога

# вывод контактов из диалога
$author = db_output($DB, 'users', array('id', 'nick', 'sex'), array('id' => $dialogue['author'])); // автор
$setup = db_output($DB, 'settings', 'mail', array('id' => $author['id'])); // настройки автора
$reply = db_output($DB, 'users', array('id', 'nick', 'sex'), array('id' => $dialogue['reply'])); // собеседник
$tune = db_output($DB, 'settings', 'mail', array('id' => $reply['id'])); // настройки собеседника
$author['link'] = $USER->nick($author['nick']); $reply['link'] = $USER->nick($reply['nick']); // преобразование ников

# работа с данными, из базы данных
$msg = db_count($DB, 'mail', 'id', array('dialog' => $dialogue['id'])); $pages = ceil($msg / DATA['mail']); if ($pages > 5) $pages = 5; // страницы
if (isset($params['page'])) { $page = $FUNC->filter($params['page'], 'int'); if ($page > $pages) $page = $pages; // проверка навигации
elseif ($page < 1) $page = 1; } else $page = 1; $offset = ($page * DATA['mail']) - DATA['mail']; $query = db_output($DB, // определение смещения
'mail', array('text', 'time', 'user'), array('dialog' => $dialogue['id']), true, 'id', DATA['mail'], $offset, 'DESC'); $one = ($pages == 2) ? '<' : 1; // вывод сообщений из базы
$two = ($pages == 2) ? '>' : 2; $form = false; $claim = false; $delete = false; $none = false; $ban = false; // навигация, данные диалога, бан

# разбор диалога, переработка данных в массиве
$index = 0; while ($assoc = $query->fetch_assoc()) {
$mail[$index] = $assoc; $index++; } 

# обработка данных
foreach ($mail as &$post) { $user = db_output($DB, 'users', array('id', 'nick', 'sex'), array('id' => $post['user'])); // данные автора
$post['nick'] = $user['nick']; $post['sex'] = $user['sex']; $post['text'] = $GAME->message($post['text']); // имя, пол
$post['time'] = ($post['time'] == time()) ? 'только что' : $USER->when($post['time'], true) .' назад'; } } // сообщение, время

####################

# проверка наличия, вывод всех диалогов
} else { if (!db_exist($DB, 'dialogs', 'id', array('author' => USER['id']))) $empty = true; 
else { $contacts = db_count($DB, 'dialogs', 'id', array('author' => USER['id'])); // счетчик контактов

# работа с данными, из базы данных
$dial = db_count($DB, 'dialogs', 'id', array('author' => USER['id'])); $pages = ceil($dial / DATA['mail']); if ($pages > 5) $pages = 5; // страницы
if (isset($params['page'])) { $page = $FUNC->filter($params['page'], 'int'); if ($page > $pages) $page = $pages; // проверка навигации
elseif ($page < 1) $page = 1; } else $page = 1; $offset = ($page * DATA['mail']) - DATA['mail']; $query = db_output($DB, // определение смещения
'dialogs', array('id', 'open', 'reply', 'time', 'user'), array('author' => USER['id']), true, 'time', DATA['mail'], $offset, 'DESC'); // вывод сообщений из базы
$one = ($pages == 2) ? '<' : 1; $two = ($pages == 2) ? '>' : 2; // навигация, определение переходов

# разбор диалога, переработка данных в массиве
$index = 0; while ($assoc = $query->fetch_assoc()) {
$mail[$index] = $assoc; $index++; }

# обработка данных
foreach ($mail as &$post) { $user = db_output($DB, 'users', array('id', 'nick', 'sex'), array('id' => $post['reply'])); // данные автора
$post['name'] = $user['nick']; $post['nick'] = $USER->nick($user['nick']); $post['sex'] = $user['sex']; // имя, пол, ссылка
$post['time'] = $USER->when($post['time'], true) .' назад'; $post['type'] = ($post['open'] == 'yes') ? 'read' : 'mail'; } } } // количество сообщений

# проверка на наличие жалоб, вывод ссылки
if (USER['status'] == 'admin' && (db_exist($DB, 'dialogs', 'id', array('view' => 'yes'))) && !$drudge) { 
$view = true; $moan = db_output($DB, 'dialogs', 'id', array('view' => 'yes')); } else $view = false;

####################

# данные верхней ссылки
if ($dialog) $spot = ($page == 1) ? '/mail/dialog/'. $USER->nick($nick) .'/refresh/'. $refresh : 
'/mail/dialog/'. $USER->nick($nick) .'/page/'. $page .'/refresh/'. $refresh; elseif ($drudge) // диалог
$spot = ($page == 1) ? '/mail/viewer/'. $duolog['id'] .'/refresh/'. $refresh .'/token/'. TOKEN : 
'/mail/viewer/'. $duolog['id'] .'/page/'. $page .'/refresh/'. $refresh .'/token/'. TOKEN; // просмотр жалобы
else $spot = ($page == 1) ? '/mail/refresh/'. $refresh : '/mail/page/'. $page .'/refresh/'. $refresh; // контакты

# данные нижней ссылки
if ($pages > 1) { if ($dialog) $bottom = '/mail/dialog/'. $nicked; elseif ($drudge) // диалог
$bottom = '/mail/viewer/'. $duolog['id'] .'/token/'. TOKEN; } // просмотр жалобы

?>