Файл: comm/inc/forum.php
Строк: 261
<?php
/** Модуль Сообщества
* @author Kratos
* @email wssy@mail.ua
* ICQ: 845348
* @version 1.0.0
*/
// Выбираем сообщество
$id_soo = (int)$_GET['id'];
// Проверка соостоит ли юзер в сообе
$user_comm = func::UserComm($id_soo, $user_id);
if(!$id_soo){
header("Location: index.php");
}
// Проверка на наличие тем у форуме
$issetT = forum::issetT($id_soo);
//Проверка действия
$do = strip_tags($_GET['do']);
if(in_array($do,array("newt","t","say","del","up","vip","delt"))){
$do = $_GET['do'];
}else{
$do = null;
}
//Проверка на бан
$uban = func::banstat($id_soo, $user_id);
if($uban){
echo functions::display_error("Вас забанили!Осталось: " . functions::timecount($uban - time()) . "");
echo '<a href="index.php?id='.$row['cat'].'">Назад</a>';
require('../incfiles/end.php');
exit();
}
//Проверка закрыто ли сообщество
$row = func::showUserComm($id_soo);
$access = $row['access'];
switch($do){
// Создаем тему для общения
case'newt':
if(!$user_comm or $access == 1 and func::rightsUserComm($id_soo, $user_id) < 7){
header("Location:?act=forum&id=$id_soo");exit();
}
$error = array();
if($_POST){
$name = isset($_POST['name']) ? functions::checkin(mb_substr(trim($_POST['name']), 0, 50)) : '';
$text = isset($_POST['text']) ? functions::checkin(trim($_POST['text'])) : '';
$id_soo = (int)$_GET['id'];
if (empty($name)){
$error[] = "Заполните поле названия!";
}
if (empty($text)) {
$error[] = "Заполните поле текст!";
}
if (mb_strlen($name) < 5) {
$error[] = "Поле названия менее 5 символов!";
}
if (mb_strlen($text) < 5) {
$error[] = "Поле текст менее 5 символов!";
}
if (!$error){
if(!forum::newTheme($id_soo, $name, $text, $user_id)){
die('Неизвесная ошибка! Обратитесь к администрации!');
exit();
}
header("Location:?act=forum&id=$id_soo");
}else{
echo functions::display_error($error);
}
}
echo '<div class="phdr">Создать тему</div>';
?>
<div class="menu">
<form action="?act=forum&do=newt&id=<?=$id_soo?>" method="post">
<p>
Название темы(min 5)*:
<br/>
<input type="text" name="name" value="" maxlength="50"/></p>
<p>Текст(min 5)*:<br/>
<input type="text" name="text" value=""/></p>
<p><span style='color:red'>* - обязательные поля</span></p>
<input type="submit" name="send" value="Создать" />
</form>
</div>
<?php
break;
//Вывод сообщений в теме
case 't':
$id_t = (int)strip_tags($_GET['idt']);
$total = db::result(db::query("SELECT count(*) FROM `comm_forum` WHERE `refid` = $id_t"),0);
if ($start >= $total) {
// Исправляем запрос на несуществующую страницу
$start = max(0, $total - (($total % $kmess) == 0 ? $kmess : ($total % $kmess)));
}
$res = forum::showMess($id_t, $start, $kmess);
$res2 = forum::showTheme($id_t,$start,$kmess,'info');
$tema = mysqli_fetch_assoc($res2);
//Запрос в бд
if(!forum::upTopicTime($id_t, $user_id)){
forum::upTopicTime($id_t, $user_id,'insert');
}else{
forum::upTopicTime($id_t, $user_id,'up');
}
if($total == 0){
echo functions::display_error('Нет такой темы!', '<a href="?act=forum&id='.$id_soo.'">' . $lng['back'] . '</a>');
require('../incfiles/end.php');
exit();
}
echo '<div class="phdr"><a href="?act=forum&id='.$id_soo.'">Форум</a> | '.$tema['text'].'</div>';
while($row = mysqli_fetch_assoc($res)){
$uid = func::showUsersInfo($row['from']);
echo $i % 2 ? '<div class="list2">' : '<div class="list1">';
if ($uid['sex']){
echo '<img src="../theme/' . $set_user['skin'] . '/images/' . ($uid['sex'] == 'm' ? 'm' : 'w') . ($uid['datereg'] > time() - 86400 ? '_new' : '') . '.png" width="16" height="16" align="middle" /> ';
}else{
echo '<img src="../images/del.png" width="12" height="12" align="middle" alt=""/> ';
}
if($row['user_id'] != $user_id){
echo '<a href="../users/profile.php?user=' . $row['user_id'] . '">' . $uid['name'] . '</a> ';
}else{
echo '<b>'.$uid['name'].'</b>';
}
// Метка должности
$user_rights = array(
0 => '',
7 => ' (Модератор)',
8 => ' (Админ)',
9 => ' (Создатель)'
);
echo '<small>'.$user_rights[func::rightsUserComm($id_soo, $row['user_id'])].'</small>';
// Метка Онлайн / Офлайн
echo (time() > $uid['lastdate'] + 300 ? '<span style="color:red"> [Off]</span> ' : '<span class="green"> [ON]</span> ');
echo ' <span class="gray">(' . functions::display_date($row['time']) . ')</span><br/>';
//
if(func::rightsUserComm($id_soo, $user_id) >= 7 and $row['user_id'] != $user_id and func::rightsUserComm($id_soo, $user_id) > func::rightsUserComm($id_soo, $row['user_id'])){
echo ' <small>(<span style="font-size:8pt"><a href="?act=musers&us='.$row['user_id'].'&id='.$id_soo.'">Изм</a> | ';
echo ' <a href="?act=musers&us='.$row['user_id'].'&id='.$id_soo.'&do=ban">Бан</a></span>)</small>';
}
$text = functions::checkout($row['text'],1,1);
$text = functions::smileys($text, 1);
echo '<p>'.$text.'</p>';
if ($row['edit']) {
$use = func::showUsersInfo($row['edit']);
// Если пост редактировался, показываем кем и когда
echo '<span class="gray"><small>Изм. <b>' . $use['name'] . '</b> (' . functions::display_date($row['tedit']) . ')</small></span>';
}
if(func::rightsUserComm($id_soo, $user_id) >= 7){
echo '<div class="sub"><a href="?act=forum&do=up&id='.$id_soo.'&idp='.$row['id'].'&idt='.$id_t.'">Изменить</a> | <a href="?act=forum&do=del&id='.$id_soo.'&idp='.$row['id'].'&idt='.$id_t.'">Удалить</a></div>';}
echo '</div>';
}
if ($total > $kmess) {
echo '<div class="topmenu">' . functions::display_pagination('?act=forum&do=t&id='.$id_soo.'&idt='.$id_t.'&', $start, $total, $kmess) . '</div>';
echo '<p><form action="?act=forum&id='.$id_soo.'&do=t&idt='.$id_t.'&" method="post"><input type="text" name="page" size="2"/><input type="submit" value="' . $lng['to_page'] . ' >>"/></form></p>';
}
echo '<div class="phdr">' . $lng['total'] . ': ' . $total . '</div>';
if($user_comm){
if($access != 1 or func::rightsUserComm($id_soo, $user_id) >= 7){
echo '<div class="func"><a href="?act=forum&id='.$id_soo.'&idt='.$id_t.'&do=say">Написать</a></div>';}
}
if(func::rightsUserComm($id_soo, $user_id) >= 7){
if(!$tema['vip']){
echo '<div class="func"><a href="?act=forum&id='.$id_soo.'&idt='.$id_t.'&do=vip&vip">Закрепить</a></div>';
}else{
echo '<div class="func"><a href="?act=forum&id='.$id_soo.'&idt='.$id_t.'&do=vip">Открепить</a></div>';
}
echo '<div class="func"><a href="?act=forum&id='.$id_soo.'&idt='.$id_t.'&do=delt">Удалить</a></div>';
}
break;
//Закрепления темы
case'vip':
if(!$user_comm or $access == 1 and func::rightsUserComm($id_soo, $user_id) < 7){
header("Location:?act=forum&id=$id_soo");exit();
}
$vip = isset($_GET['vip']) ? 1 : 0;
$idt = (int)htmlspecialchars($_GET['idt']);
if($vip == 1){
forum::vipT($idt,1);
header("Location:?act=forum&id=$id_soo&do=t&idt=$idt");
exit();
}else{
forum::vipT($idt,0);
header("Location:?act=forum&id=$id_soo&do=t&idt=$idt");
exit();
}
break;
//Добавления поста!
case'say':
$id_t = (int)strip_tags($_GET['idt']);
if(!$user_comm or $access == 1 and func::rightsUserComm($id_soo, $user_id) < 7){
header("Location:?act=forum&do=t&id=$id_soo&idt=$id_t");
}
if($_POST){
$msg = isset($_POST['msg']) ? functions::checkin(trim($_POST['msg'])) : '';
//Обрабатываем ссылки
$msg = preg_replace_callback('~\[url=(http://.+?)\](.+?)\[/url\]|(http://(www.)?[0-9a-zA-Z.-]+.[0-9a-zA-Z]{2,6}[0-9a-zA-Z/?.~&_=/%-:#]*)~', 'forum_link', $msg);
// Проверяем на минимальную длину
if (mb_strlen($msg) < 5) {
echo functions::display_error($lng['error_message_short'], '<a href="?act=forum&id='.$id_soo.'&idt='.$id_t.'&do=say">' . $lng['back'] . '</a>');
require('../incfiles/end.php');
exit;
}
//Добавляем сообщения в бд
if(!forum::newMess($id_t, $user_id, $msg, $id_soo)){
echo functions::display_error('Ошибка системы!!! Обратитесь к администрации!', '<a href="?act=forum&id='.$id_soo.'&idt='.$id_t.'&do=say">' . $lng['back'] . '</a>');
require('../incfiles/end.php');
exit;
}else{
//Вычисляем страницу поста
$page = ceil(db::result(db::query("SELECT COUNT(*) FROM `comm_forum` WHERE `type` = 'm' AND `refid` = '$id_t'"), 0) / $kmess);
header("Location:?act=forum&do=t&id=$id_soo&idt=$id_t&page=$page");
}
}
echo '<form name="form" action="?act=forum&id='.$id_soo.'&idt='.$id_t.'&do=say" method="post"><div class="gmenu">' .
'<p><h3>Сообщение</h3>';
if (!$is_mobile) {
echo '</p><p>' . bbcode::auto_bb('form', 'msg');
}
echo '<textarea rows="' . $set_user['field_h'] . '" name="msg">' . (empty($_POST['msg']) ? '' : functions::checkout($msg)) . '</textarea></p>';
echo '<p><input type="submit" name="submit" value="Отправить" style="width: 107px; cursor: pointer"/></p></div></form>';
break;
//Удаления поста
case'del':
if(func::rightsUserComm($id_soo, $user_id) >= 7){
$id_soo = (int)htmlspecialchars($_GET['id']);
$id_t = (int) htmlspecialchars($_GET['idt']);
$idp = (int) htmlspecialchars($_GET['idp']);
$act = strip_tags($_GET['stat']);
$onepost = mysqli_fetch_assoc(db::query("SELECT `id` FROM `comm_forum` WHERE `refid` = ".$id_t." AND `type` = 'm' ORDER by time LIMIT 1"));
$tpost = forum::countPost($id_t);
switch($act){
case 'yes':
if($onepost['id'] == $idp and $tpost == 1){
//Удаления поста!
forum::deletePost($idp);
//удаления темы!
forum::deleteT($id_t);
header("Location:?act=forum&id=$id_soo");
}else{
if(!forum::deletePost($idp)){
die('Ошибка! Обратитесь к администрации!');exit();
}
header("Location:?act=forum&id=$id_soo&idt=$id_t&do=t");
exit();
}
break;
case 'no':
header("Location:?act=forum&do=t&id=$id_soo&idt=$id_t");exit();
break;
default:
echo '<div class="phdr">Удаления поста</div>';
echo '<div class="menu">Вы уверены, что хотите удалить?</div>';
echo '<div class="menu"><a href="?act=forum&id='.$id_soo.'&do=del&idt='.$id_t.'&idp='.$idp.'&stat=yes">Да</a>
| <a href="?act=forum&do=del&id='.$id_soo.'&idt='.$id_t.'&idp='.$idp.'&stat=no">Нет</a></div>';
break;
}
}else{
header("Location:?act=forum&id=$id_soo");
}
break;
//Изменения поста
case'up':
if(func::rightsUserComm($id_soo, $user_id) >= 7){
$id_soo = (int)htmlspecialchars($_GET['id']);
$id_t = (int)htmlspecialchars($_GET['idt']);
$idp = (int)htmlspecialchars($_GET['idp']);
if(!$user_comm){
header("Location:?act=forum&id=$id_soo");exit();
}
$error = array();
if($_POST){
$text = isset($_POST['msg']) ? functions::checkin(trim($_POST['msg'])) : '';
if (empty($text)) {
$error[] = "Заполните поле текст!";
}
if (mb_strlen($text) < 5) {
$error[] = "Минимум 5 символов!";
}
if (!$error){
if(!forum::upPost($idp,$text,$user_id)){
die('Неизвесnная ошибка! Обратитесь к администрации!');
exit();
}
header("Location:?act=forum&id=$id_soo&idt=$id_t&do=t");
}else{
echo functions::display_error($error);
}
}
echo '<div class="phdr">Изменить пост</div>';
$row = mysqli_fetch_assoc(forum::showMess($idp, $start, $kmess, 1));
echo '<form name="form" action="?act=forum&do=up&id='.$id_soo.'?>&idt='.$id_t.'>&idp='.$idp.'" method="post"><div class="gmenu">';
'<p><h3>Сообщение</h3></p>';
if (!$is_mobile) {
echo '<p>' . bbcode::auto_bb('form', 'msg');
}
echo '<textarea rows="' . $set_user['field_h'] . '" name="msg">'.functions::checkout($row['text']).'</textarea></p>';
echo '<p><input type="submit" name="submit" value="Отправить" style="width: 107px; cursor: pointer"/></p></div></form>';
}
break;
//Удаления темы
case'delt':
if(func::rightsUserComm($id_soo, $user_id) >= 7){
$id_soo = (int)htmlspecialchars($_GET['id']);
$id_t = (int)htmlspecialchars($_GET['idt']);
$act = strip_tags($_GET['stat']);
switch($act){
case 'yes':
if(!forum::deleteT($id_t)){
die('Ошибка! Обратитесь к администрации!');
}
header("Location:?act=forum&id=$id_soo");exit();
exit();
break;
case 'no':
header("Location:?act=forum&do=t&id=$id_soo&idt=$id_t");exit();
break;
default:
echo '<div class="phdr">Удаления поста</div>';
echo '<div class="menu">Вы уверены, что хотите удалить?</div>';
echo '<div class="menu"><a href="?act=forum&id='.$id_soo.'&do=delt&idt='.$id_t.'&stat=yes">Да</a>
| <a href="?act=forum&do=delt&id='.$id_soo.'&idt='.$id_t.'&stat=no">Нет</a></div>';
break;
}
}else{
header("Location:?act=forum&id=$id_soo");
}
break;
default:
echo '<div class="phdr"><a href="?act=comm&id='.$id_soo.'">В сообщество</a> | Форум</div>';
if($issetT != 0){
$res = forum::showTheme($id_soo,$start,$kmess);
$i= 0;
while($row = mysqli_fetch_assoc($res)){
$lastuserpost = db::query("SELECT `from` FROM `comm_forum` WHERE `refid` = ".$row['id']." AND `type` = 'm' ORDER by time DESC LIMIT 1");
$nam = mysqli_fetch_assoc($lastuserpost);
$oneuserpost = db::query("SELECT `from` FROM `comm_forum` WHERE `refid` = ".$row['id']." AND `type` = 'm' ORDER by time LIMIT 1");
$onenam = mysqli_fetch_assoc($oneuserpost);
//Последняя страница
$colmes = db::result(db::query("SELECT COUNT(*) FROM `comm_forum` WHERE `type`='m' AND `refid`='" . $row['id'] . "'"),0);
$cpg = ceil($colmes / $kmess);
$naml = func::showUsersInfo($nam['from']);
$namo = func::showUsersInfo($onenam['from']);
$np = db::result(db::query("SELECT COUNT(*) FROM `comm_forum_rdm` WHERE `time` >= '" . $row['time'] . "' AND `topic_id` = '" . $row['id'] . "' AND `user_id`='$user_id'"), 0);
// Значки
$icons = array(
($np ? (!$row['vip'] ? '<img src="../theme/' . $set_user['skin'] . '/images/op.gif" alt=""/>' : '') : '<img src="../theme/' . $set_user['skin'] . '/images/np.gif" alt=""/>'),
($row['vip'] ? '<img src="../theme/' . $set_user['skin'] . '/images/pt.gif" alt=""/>' : '')
);
echo $i % 2 ? '<div class="list2">' : '<div class="list1">';
echo functions::display_menu($icons, ' ', ' ');
//echo $row['vip'] ? '<img src="../theme/' . $set_user['skin'] . '/images/pt.gif" alt=""/>' : '<img src="../theme/' . $set_user['skin'] . '/images/np.gif" alt=""/>';
echo '<a href="?act=forum&do=t&id='.$id_soo.'&idt='.$row['id'].'">'.$row['text'].'</a> ('.forum::countPost($row['id']).')';
// На посл. страницу
if ($cpg > 1) {
echo ' <a href="?act=forum&do=t&id='.$id_soo.'&idt='.$row['id'].'&page=' . $cpg . '">»</a>';
}
//Первый и последний кто оставил пост!
echo '<div class="sub">'.$namo['name'] .' / '.$naml['name'].'</div>';
echo '</div>';
$i++;
}
if ($issetT > $kmess) {
echo '<div class="topmenu">' . functions::display_pagination('?act=forum&id='.$id_soo.'&', $start, $issetT, $kmess) . '</div>';
echo '<p><form action="?act=forum&id='.$id_soo.'&" method="post"><input type="text" name="page" size="2"/><input type="submit" value="' . $lng['to_page'] . ' >>"/></form></p>';
}
echo '<div class="phdr">' . $lng['total'] . ': ' . $issetT . '</div>';
}else{
echo 'Тем пока нет!';
}
if($user_comm)
if($access != 1 or func::rightsUserComm($id_soo, $user_id) >= 7){
echo '<div class="func"><a href="?act=forum&id='.$id_soo.'&do=newt">Создать тему</a></div>';}
break;
}
?>