<?php defined('ACCESS') OR die('No direct script access...');
define('UPDATE', 5e3); // обновление сообщений раз в 5 секунд
/**
* Author - koder_alex
* ISQ - 669906617
* VK - https://vk.com/koder_alex
* Modificacions - Tw1nGo
* It is forbidden to give, sell, modify.
* Update v.7
*/
function thead($text = 'Диалоги', $isAudio = false)
{
global $user, $time, $db, $set, $err, $ftime;
$set['title'] = $text;
require H.'sys/inc/thead.php';
shapka_VK(false, '', ''.$text.'');
err();
?>
<div id="resizePanel" style="display: block; padding: 0px; margin: 0px"></div>
<div class="vk_mail">
<?
if(isset($_SESSION['_VK_mail']) && is_array($_SESSION['_VK_mail']))
show($_SESSION['_VK_mail']['text'], $_SESSION['_VK_mail']['type']);
}
/**
* [redirect функция редиректа с записью ошибки в сессию]
* @param string $url [принимает адрес]
* @param [type] $msg [текст ошибки]
* @param string $type [тип ошибки ok|null|warning|error]
*/
function redirect($url = '/mail/', $msg = null, $type = 'ok')
{
if(!is_null($msg))
$_SESSION['_VK_mail'] = array(
'text' => $msg,
'type' => $type
);
exit(header('Location: ' . $url));
}
/**
* [show функция отображения ошибок]
* @param [type] $msg [текст ошибки]
* @param string $type [тип ошибки ok|null|warning|error]
*/
function show($msg = null, $type = 'ok')
{
if(is_null($msg))
return false;
?>
<div id="show_msg_box" class="service_msg_box">
<div class="service_msg service_msg_<?= $type ?>"><?= $msg ?></div>
<?= ($type != 'null' ? '<div class="tu_cancel_wrap" onclick="MessagesActions.BoxClose(this)"><i class="tu_cancel"></i></div>' : '') ?>
</div>
<?
if(isset($_SESSION['_VK_mail']) && is_array($_SESSION['_VK_mail']))
unset($_SESSION['_VK_mail']);
}
/**
* Вырезаем ссылки для верного отображения
*/
function hideLink($msg)
{
if(preg_match('/<a[^>]*>[^<]*<\/a>/i', $msg, $m) === 1)
{
$msg = preg_replace('/<a[^>]*>[^<]*<\/a>/i', '', $msg);
$msg .= '<div class="mi_medias_plain">Ссылка</div>';
}
return $msg;
}
function short_text($text, $words_count = 70, $break = '...') {
$data = explode(' ', $text);
$count = count($data);
$data = array_slice($data, 0, $words_count);
$text = implode(' ', $data);
if ($count > $words_count)
$text.= '...';
return $text;
}
function pagePostData($k_page = 1)
{
$page = 1;
if (filter_has_var(INPUT_POST, 'page'))
{
$page = filter_input(INPUT_POST, 'page', FILTER_SANITIZE_NUMBER_INT);
}
if ($page < 1) {
$page = 1;
}
if ($page > $k_page) {
$page = $k_page;
}
return (int)$page;
}
/**
* Определяем существует ли данная "des2num" функция, если нет то используем свою
*/
if(!function_exists('des2num'))
{
function des2num($int, $array)
{
$cases = array (2, 0, 1, 1, 1, 2);
return $int . $array[ ($int % 100 > 4 && $int % 100 < 20) ? 2 : $cases[min($int % 10, 5)] ];
}
}
if(!function_exists('timeleft'))
{
function timeleft($time)
{
$time = time() - $time;
$time = ($time > 0 ? $time : 0);
static $text;
if(empty($text))
{
$text = array(
'time' => array(
array(' год назад', ' года назад', ' лет назад'),
array(' месяц назад', ' месяца назад', ' месяцев назад'),
array(' день назад', ' дня назад', ' дней назад'),
array(' час назад', ' часа назад', ' часов назад'),
array(' минуту назад', ' минуты назад', ' минут назад'),
array(' секунду назад', ' секунды назад', ' секунд назад')
),
'num' => array(31536000, 2592000, 86400, 3600, 60)
);
}
foreach($text['num'] as $key => $item)
if($times = floor($time / $item))
return des2num($times, $text['time'][$key]);
return ($time >= 1 ? des2num($time, $text['time'][5]) : ' только что');
}
}
/**
* [isAjax функция определения Аякс запроса]
* @return boolean
*/
function isAjax()
{
return !(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' && $_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['im_ajax']) && $_POST['im_ajax'] == 'true');
}
function cleanPrettyPrint(&$data = "")
{
if(is_array($data))
foreach($data as $key => $item)
$data[$key] = cleanPrettyPrint($item);
if(is_string($data))
{
$data = preg_replace("/(\s){2,}/", '$1', $data);
//$data = preg_replace("#((<br( ?/?)>)|\n|\r|\t)+#i", '<br/>', $data);
}
return $data;
}
function setData($data)
{
header("Cache-Control: no-cache, must-revalidate"); // говорим браузеру что-бы он не кешировал эту страницу
header("Pragma: no-cache");
header("Content-type: application/json");
cleanPrettyPrint($data); // удаляем лишнее пробелы и переводы строк
echo json_encode($data, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
exit();
}
function showAttachments($id = false)
{
if(!$id)
return false;
?><div class="cp_attached_wrap"><div class="pi_medias"><?
$qF = mysql_query("SELECT id,id_user, id_kont, folder, name, tmp_name, extension, type FROM mail_files_vk WHERE `action` = 'sent' AND `id_mail` = '".$id."'");
while ($file = mysql_fetch_assoc($qF))
{
if($file['folder'] == 'reply')
{
?><div class="mi_forwarded"><?
$qR = mysql_query("SELECT id, id_user, time, msg FROM mail where id IN(".$file['name'].")");
while($re = mysql_fetch_assoc($qR))
{
$rID = d_user($re['id_user']);
?><div class="msg_item"><a class="mi_author" href="/id<?= $rID['id'] ?>"><?= u_nick($rID['id']) . $rID['online'] ?></a><span class="mi_date"><?= vremja($re['time']) ?></span><div class="mi_text"><?= output_text($re['msg']) ?></div><?= showAttachments($re['id']) ?></div><?
}
?></div><?
}
elseif($file['folder'] == 'image')
{
?>
<a class="medias_thumb thumb_item mr_x_wrap" href="/mail/files/<?= $file['folder']?>/<?= $file['tmp_name']?>" target="_blank">
<img class="ph_img" src="/mail/files/<?= $file['folder']?>/<?= $file['tmp_name']?>"></a>
<?
}
elseif($file['folder'] == 'audio')
{
?>
<div id="audio<?= $file['id_user'] ?>_<?= $file['id'] ?>_wall<?= $file['id_kont'] ?>" data-id="<?= $file['id_user'] ?>_<?= $file['id'] ?>_wall<?= $file['id_kont'] ?>" class="audio_item ai_has_btn" onclick="audioplayer.playPause(event, '<?= $file['id_user'] ?>_<?= $file['id'] ?>_wall<?= $file['id_kont'] ?>')">
<div class="ai_info">
<div class="ai_play" style=""><i class="i_play"></i></div>
<div class="ai_body">
<div class="ai_dur" onclick="audioplayer.switchTimeFormat(this, event);"></div>
<div class="ai_label">
<span class="ai_title"><?= text($file['name'])?></span>
<span class="divider" style="display: none"></span>
<span class="ai_artist" style="display: none"></span>
</div>
<input type="hidden" value="/mail/files/<?= $file['folder'] ?>/<?= $file['tmp_name'] ?>">
</div>
</div>
<div class="ai_controls">
<table class="row_table">
<tbody><tr>
<td class="aic_progress_wrap">
<div class="aic_line" onmousedown="audioplayer.setPosition(this, event);" onclick="cancelEvent(event);">
<div class="aic_ln aic_back_line" onclick="cancelEvent(event);"></div>
<div class="aic_ln aic_load_line" onclick="cancelEvent(event);"></div>
<div class="aic_ln aic_pl_wrap" onclick="cancelEvent(event);">
<div class="aic_ln aic_progress_line" onclick="cancelEvent(event);">
<div class="aic_slider" onclick="cancelEvent(event);"></div>
</div>
</div>
</div>
</td>
<td class="aic_volume_wrap">
<div class="aic_line" onmousedown="audioplayer.setVolume(this, event);" onclick="cancelEvent(event);">
<div class="aic_ln aic_back_line" onclick="cancelEvent(event);"></div>
<div class="aic_ln aic_pl_wrap" onclick="cancelEvent(event);">
<div class="aic_ln aic_progress_line" onclick="cancelEvent(event);">
<div class="aic_slider" onclick="cancelEvent(event);"></div>
</div>
</div>
</div>
</td>
</tr>
</tbody></table>
</div>
</div><?
}
elseif($file['folder'] == 'video')
{
if($file['extension'] == 'mp4')
{
?>
<video name="media" controls="controls" style="width: 100%; height: 100%; margin: 0 0% 0% 0;">
<source src="/mail/files/<?= $file['folder'] ?>/<?= $file['tmp_name'] ?>" type="<?= $file['type'] ?>">
</video>
<a class="medias_row mr_x_wrap" href="/mail/file/<?= $file['folder'] ?>/<?= $file['tmp_name'] ?>">
<span class="mr_label medias_link medias_audio">
<span class="medias_link_icon"><i class="i_icon i_doc"></i></span><span class="medias_link_label">Видео</span>
<span class="medias_audio_title"><?= $file['name'] ?>.<?= $file['extension'] ?></span></span></a>
<?
}
else
{
?>
<a class="medias_row mr_x_wrap" href="/mail/file/<?= $file['folder'] ?>/<?= $file['tmp_name'] ?>"><span class="mr_label medias_link"> <span class="medias_link_icon"><i class="i_icon i_doc"></i></span><span class="medias_link_label">Файл</span><span class="medias_link_labeled medias_link_title"> <?= $file['name'] ?>.<?= $file['extension'] ?></span></span></a>
<?
}
}
else
{
?>
<a class="medias_row mr_x_wrap" href="/mail/file/<?= $file['folder'] ?>/<?= $file['tmp_name'] ?>"><span class="mr_label medias_link"> <span class="medias_link_icon"><i class="i_icon i_doc"></i></span><span class="medias_link_label">Файл</span><span class="medias_link_labeled medias_link_title"> <?= $file['name'] ?>.<?= $file['extension'] ?></span></span></a>
<?
}
}
?></div></div><?
}
/**
* [$config массив настроек]
* @var array
*/
$config = array(
'max_uploads_file' => 3, //максимальное количество загружаемых файлов
'max_length_text' => 1024, //максимальная длина текста
'min_length_text' => 2, //минимальная длина текста
'url' => array( // url адреса, лучше не трогать :)
'dialog' => 'peer',
'chat' => 'chat'
),
'folder' => array(
'application' => 'Приложение',
'audio' => 'Аудиозапись',
'image' => 'Фотография',
'text' => 'Документ',
'video' => 'Видеозапись',
'reply' => 'Пересланные сообщения'
),
'q' => array(
'type' => array(
'У Вас нет друзей',
'Ни одного диалога не найдено',
'Ни одного друга не найдено'
),
'text' => (isset($_GET['q']) ? implode(' ', explode('+', text($_GET['q']))) : false)
),
'attachments' => false,
);
/**
* Удаление файлов которые были загружены но не отправленные, удаление будет происходить раз в сутки.
*/
if(!is_file(H . 'mail/files/lastCleanTime.touch'))
touch(H . 'mail/files/lastCleanTime.touch');
if(filemtime(H . 'mail/files/lastCleanTime.touch') < (time() - 86400))
{
$q = mysql_query("SELECT folder, tmp_name FROM mail_files_vk WHERE `action` = 'prepare' AND `id_mail` = '0' AND `time` < '".(time() - 86400)."'");
while($unlink = mysql_fetch_assoc($q))
unlink(H . 'mail/files/' . $unlink['folder'] . '/' . $unlink['tmp_name']);
mysql_query("DELETE FROM `mail_files_vk` WHERE `action` = 'prepare' AND `id_mail` = '0' AND `time` < '".(time() - 86400)."'");
unset($q, $unlink);
touch(H . 'mail/files/lastCleanTime.touch');
}