Файл: chat/index.php
Строк: 185
<?php
define('CMS', TRUE);
include('../core/inc.php');
$id = !empty($_GET['id']) ? (int) $_GET['id'] : 0;
$mod = !empty($_GET['m']) ? (string) $_GET['m'] : '';
$page = !empty($_GET['page']) ? (int) $_GET['page'] : 1;
$is_admin = (bool) is_admin() ? true : false;
# Админ действия чата
if ($is_admin) {
if (!empty($_POST['del_msg'])) { // Удаление сообщений
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
$del = intar($_REQUEST['del']);
if (is_array($del)) {
$del = implode(',', $del);
$db->query("DELETE FROM ?_chat_post WHERE `id` IN (" . $del . ");");
$inSes->addMessage('Выбранные сообщения успешно удалены!', 'ok');
}
else {
$db->query("DELETE FROM ?_chat_post WHERE `id` = ? LIMIT 1;", $del);
$inSes->addMessage('Сообщение успешно удалёно!', 'ok');
}
$db->query("OPTIMIZE TABLE ?_chat_post, ?_chat_rooms, ?_chat_who");
}
else $inSes->addMessage('Неверный идентификатор сессии, повторите действие!');
}
if (!empty($_POST['clear_chat'])) { // Очистка чата
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
$db->query("TRUNCATE TABLE ?_chat_post");
$db->query("OPTIMIZE TABLE ?_chat_post, ?_chat_rooms, ?_chat_who");
$inSes->addMessage('Чат успешно очищен от сообщений!', 'ok');
}
else $inSes->addMessage('Неверный идентификатор сессии, повторите действие!');
gen_red('index', '', RND);
}
}
# Добавление сообщения
if (!empty($_POST['send'])) {
$name = !empty($_POST['name']) ? check($_POST['name']) : '';
$mess = !empty($_POST['mess']) ? check($_POST['mess']) : '';
$len = cms_strlen(trim(str_replace(' ', '', $mess)));
$_SESSION[SP]['crc32'] = !empty($_SESSION[SP]['crc32']) ? $_SESSION[SP]['crc32'] : NULL;
if ($is_logged || !empty($config['chat_guest'])) {
if (!empty($_POST['rnd']) && $_POST['rnd'] == $_SESSION['token']) {
if ($len >= $config['chat_min_text'] && $len < $config['chat_max_text']) {
if ( crc32($mess) <> $_SESSION[SP]['crc32'] ) {
if ($is_logged) {
if (is_flood($log)) {
$_SESSION[SP]['crc32'] = crc32($mess);
$mess = antimat($mess);
$mess = smiles($mess);
if (!empty($_POST['privat']) && num($_POST['reply']) > 0) {
$prv = $db->selectRow("SELECT * FROM ?_chat_post WHERE `id` = ?", num($_POST['reply']));
$privat = !empty($prv['user']) ? check($prv['user']) : '';
}
else $privat = '';
$db->query("INSERT INTO ?_chat_post SET `room` = '0', `user` = ?, `time` = ?, `msg` = ?, `privat` = ?, `ip` = ?, `ua` = ?", $log, SITE_TIME, $mess, $privat, $ip, $brow);
$db->query("UPDATE ?_users SET `users_allchat` = (`users_allchat` + 1), `users_point` = (`users_point` + ?), `users_money` = (`users_money` + ?) WHERE `users_login` = ?", $config['chat_add_ball'], $config['chat_add_money'], $log);
$inSes->addMessage('Сообщение успешно добавлено!', 'ok');
gen_red('index', '', RND);
}
else $inSes->addMessage('Антифлуд! Разрешается отправлять сообщения раз в ' . flood_period() . ' секунд!');
}
else {
if (cms_strlen($name) >= 3) {
if (cms_strlen($name) <= 25) {
$_SESSION[SP]['crc32'] = crc32($mess);
$mess = antimat($mess);
$mess = smiles($mess);
$db->query("INSERT INTO ?_chat_post SET `guest` = ?, `time` = ?, `msg` = ?, `ip` = ?, `ua` = ?", $name, SITE_TIME, $mess, $ip, $brow);
$inSes->addMessage('Сообщение успешно добавлено!', 'ok');
gen_red('index', '', RND);
}
else $inSes->addMessage('Ошибка! Слишком длинное имя!');
}
else $inSes->addMessage('Ошибка! Слишком короткое имя!');
}
}
else $inSes->addMessage('Ошибка! Ваше сообщение <u>уже было</u> успешно добавлено!');
}
else $inSes->addMessage('Ошибка! Слишком длинное или короткое сообщение!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
else $inSes->addMessage('Ошибка! Вы не авторизованы!');
}
# Удаление онлайн
if (!empty($_SESSION[SP]['chat_online'])) {
if ($_SESSION[SP]['chat_online'] < (time()-$config['chat_online'])) {
$db->query("DELETE FROM ?_chat_who WHERE (`time` < UNIX_TIMESTAMP() - ?)", $config['chat_online']);
}
}
$_SESSION[SP]['chat_online'] = time();
$where = ($is_logged) ? "`user` = '" . $log . "'" : "`ip` = '" . $ip . "'";
$is_user = (int) $db->selectCell("SELECT `time` FROM ?_chat_who WHERE " . $where);
if ($is_user > 0) {
$db->query("UPDATE ?_chat_who SET `time` = ?, `ip` = ?, `ua` = ? WHERE " . $where, SITE_TIME, $ip, $brow);
}
else {
$db->query("INSERT INTO ?_chat_who SET `user` = ?, `time` = ?, `ip` = ?, `ua` = ?", $log, SITE_TIME, $ip, $brow);
}
$count = (int) $db->selectCell("SELECT COUNT(1) FROM ?_chat_who");
if ($config['chat_refresh'] > 0) header('Refresh: ' . num($config['chat_refresh']) . '; url=' . gen_uri('chat', $id, RND));
show_header('Чат - ' . $count);
if ($is_logged || !empty($config['chat_guest'])) {
echo '<div class="bl"><table class="w100">';
echo '<form action="' . gen_uri('index', '', RND) . '" method="post">';
if (!$is_logged) echo '<tr><td>Логин:</td><td><input type="text" name="name" style="width:96%;" value="' . request('name') . '" /></td></tr>';
echo '<tr><td>Сообщение:</td><td><textarea name="mess" rows="1">' . request('mess') . '</textarea></td></tr>';
echo '<tr><td></td><td><input type="submit" name="send" class="butt" style="float:right;" value="Отправить" /></td></tr>';
echo '<input type="hidden" name="rnd" value="' . $_SESSION['token'] . '" />';
echo '</form></table></div>';
}
else show_login('Вы не авторизованы, для добавления сообщений, необходимо');
$onpage = !empty($config['chat_num']) ? num($config['chat_num']) : 10;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
$rows = array();
$rows = $db->selectPage($total, "SELECT `c`.*, `u`.`users_gender`, `u`.`users_id`, `v`.`visit_nowtime`
FROM ?_chat_post `c`
LEFT JOIN ?_users `u`
ON `c`.`user` = `u`.`users_login`
LEFT JOIN ?_users_visit `v`
ON `c`.`user` = `v`.`visit_user`
WHERE `c`.`msg` != ''
ORDER BY `c`.`time` DESC
LIMIT ?d, ?d", $from, $onpage);
if (!empty($rows) && $total > 0) {
if ($is_admin) {
echo '<form action="?rnd=' . $_SESSION['token'] . '" method="post" name="chats">';
}
$i = $from + 1;
foreach ($rows as $numRow => $row) {
if (!empty($row['guest'])) {
echo '<div class="bl">';
echo '<table class="w100"><tr>';
echo '<td valign="top" class="vhr">' . user_avatars($row['guest'], 1);
if ($is_admin) echo '<br /><input type="checkbox" name="del[]" value="' . num($row['id']) . '" /></td>';
else echo '</td>';
echo '<td valign="top">';
echo '<span class="fr xsmall">' . get_date($row['time']) . '</span>';
echo $config['guest_name'] . ' ' . $row['guest'] . '<hr />';
echo nl2br(bb_code($row['msg'])) . '</td></tr></table></div>';
}
else {
echo '<div class="bl">';
echo '<table class="w100"><tr>';
echo '<td valign="top" class="vhr">' . user_avatars($row['user']);
if ($is_admin) echo '<br /><input type="checkbox" name="del[]" value="' . num($row['id']) . '" /></td>';
else echo '</td>';
echo '<td valign="top">';
echo '<span class="fr xsmall">' . get_date($row['time']) . '</span>';
echo user_visit_icon($row['user'], $row['users_gender'], $row['visit_nowtime']);
echo ' ' . users_anketa($row['users_id'], $row['user']) . '<hr />';
echo nl2br(bb_code($row['msg'])) . '</td></tr></table></div>';
}
/*
$i++;
echo '<div class="bl">';
echo '<div class="img">' . user_avatars($row['user']) . '</div>';
echo users_anketa($row['user']) . ' ';
echo date('H:i:s', $row['time']) . ' ' . user_online($row['user']);
if ($row['user'] <> $log) echo '<span style="float:right;"><a href="?reply=' . num($row['id']) . '#form">ответить</a></span>';
if (!empty($row['privat'])) {
echo '<br /><b>Приватное</b>';
if ($is_logged && $row['privat'] == $log) {
echo '<br />' . nl2br(bb_code($row['msg']));
}
}
else {
echo '<br />' . nl2br(bb_code($row['msg']));
}
if ($is_admin) {
echo '<br /><input type="checkbox" name="del[]" value="' . num($row['id']) . '" /> ';
echo '(' . $row['ip'] . ' / ' . $row['ua'] . ')<br />';
}
echo '</div>';
*/
}
if ($is_admin) {
echo '<div class="bl"><table><tr>';
echo '<td><input type="checkbox" name="master_box" title="Отметить всё" onclick="javascript:ckeck_uncheck_all()"></td>';
echo '<td><input type="submit" name="del_msg" value="Удалить выбранное" /></form></td>';
echo '<td><form action="?rnd=' . $_SESSION['token'] . '" method="post">';
echo '<input type="submit" name="clear_chat" value="Очистить чат" /></form></td></tr></table></div>';
echo <<<JSCRIPT
<script language='JavaScript' type="text/javascript">
<!--
function ckeck_uncheck_all() {
var frm = document.chats;
if(frm.master_box.checked == true){ frm.master_box.checked = false; }
else{ frm.master_box.checked = true; }
for (var i=0;i<frm.elements.length;i++) {
var elmnt = frm.elements[i];
if (elmnt.type=='checkbox') {
if(frm.master_box.checked == true){ elmnt.checked=false; }
else{ elmnt.checked=true; }
}
}
}
-->
</script>
JSCRIPT;
}
echo show_pages(gen_uri('chat', $id));
}
else show_error('Cообщений пока нет..');
show_footer();
?>