View file wip-site-portal/src/forum_messages.php

File size: 12.41Kb
<?
require('ini.php');
$link=connect();

$user=login('nick, loc, forum_mlim, forum_full_ignor, forum_admin, forum_moder', 'forums', true);

if(isset($_COOKIE['forums_login'])) $ban_cookie = true;
else $ban_cookie = false;

if($user) $sess = 'sid='.$sid.'&amp;';
else $sess = false;

@$mod=$_GET['mod'];
@$msg = trim($_POST['msg']);
@$tid = intval($_GET['tid']);
@$mid = intval($_GET['mid']);
@$s = intval($_GET['s']);

$select = mysql_query("SELECT `t`.`name` AS `topic`, `t`.`last`, `t`.`read`, `t`.`close`, `t`.`write`, `f`.`id` AS `fid`, `f`.`name` AS `forum` FROM `wip_forum_topics` AS `t`, `wip_forum_forums` AS `f` WHERE `f`.`id`=`t`.`fid` AND `t`.`id`='".$tid."';");

if(mysql_affected_rows()<1){
	head('Ошибка!', 15, 'forums.php?'.$sess);
	echo '<small><b>Неверная тема!</b></small>';
	foot();
	exit();
}

$topic = mysql_fetch_assoc($select);

if(!$user and $topic['read']==1){
	head('Ограничение!');
	echo '<small>Эту тему могут просматривать только зарегистрированные пользователи!<br/>---<br/>';
	echo '<anchor>Назад<prev/></anchor><br/>';
	echo '<a href="forums.php?'.$sess.'">Форумы</a></small>';
	foot();
	exit();
}

if($user) mysql_query("UPDATE `wip_users` SET `loc`='forum_".$topic['fid']."', `forum_online`='".time()."' WHERE `id`='".$user['id']."';");

# Анонимные ID
if(!$user){
	$an_id = an_id();
	$uid = 3;
	
	$ban_time = mysql_result(mysql_query("SELECT `ban_time` FROM `wip_anonymouses` WHERE `id`='".$an_id."';"), 0);
	
	if($ban_time > time()) $an_ban = true;
	else $an_ban = false;
}
###

else $uid = $user['id'];

switch($mod){
	
	# Сообщения в теме
	default:
		head($topic['topic']);
		echo '<small>';
		
		# Новый ответ в теме
		if($msg and !$ban_cookie and ( ($topic['write']==0 and !$user) or $user) and $topic['close']==0){
			
			$edit = false;
			
			if($mid){
				$select = mysql_query("SELECT `uid`, `msg` FROM `wip_forum_messages` WHERE `id`='".$mid."';");
				
				if(mysql_affected_rows()>0){
					if($user['forum_moder'] or $user['forum_admin']) $edit = true;
					
					$res = mysql_fetch_assoc($select);
					if($res['uid'] == $user['id']) $edit = true;
				}
			}
			
			if($user) $uid = $user['id'];
			else $uid = 3; # Публичный ID анонима
			
			@$msg = mb_substr( htmlspecialchars($_POST['msg'], ENT_QUOTES), 0, 1000, 'UTF-8');
			
			# Добавление смайлов
			$msg=strtr($msg,array(':)'=>'<smile.gif>', ';)'=>'<wink.gif>', 'B)'=>'<cool.gif>', ':(('=>'<aaa.gif>', ':!'=>'<be.gif>', ':S'=>'<blin.gif>', '@='=>'<bum.gif>', ':X'=>'<close.gif>', ';('=>'<cry.gif>', ']:)'=>'<devil.gif>', '@-/-'=>'<flow.gif>', ':]'=>'<gaga.gif>', ':D'=>'<green.gif>', '=)'=>'<ha.gif>', '(:'=>'<lol.gif>', '=/'=>'<hm.gif>', '.kiss.'=>'<kiss.gif>', ':o)'=>'<kloun.gif>', '.lips.'=>'<lips.gif>', '.love.'=>'<love.gif>', '8o'=>'<mmm.gif>', '[:)'=>'<music.gif>', '=]'=>'<napolu.gif>', '.ninja.'=>'<ninja.gif>', '.down.'=>'<no.gif>', '%)'=>'<ogo.gif>', '.pirat.'=>'<pirate.gif>', '.beer.'=>'<pivo.gif>', ':['=>'<red.gif>', ':('=>'<sad.gif>', '.woot.'=>'<shok.gif>', '.zz.'=>'<spit.gif>', '=p'=>'<tong.gif>', ':T'=>'<svist.gif>', '.uuu.'=>'<uuu.gif>', '.wow.'=>'<view.gif>', ':?'=>'<vopros.gif>', '.up.'=>'<yes.gif>', ':@'=>'<angry2.gif>', ':O'=>'<angry.gif>'));
			$arr=explode('<',$msg);
				
			$msg=false;
				
			foreach($arr as $k=>$val){
				if($k!=0 and $k<=3) $msg.='<img src="smiles/'.$val; 
				else $msg.=$val;
				}
				
			$msg=preg_replace("/src\=\"smiles\/([a-z]+)\.gif\>/","src=\"smiles/\\1.gif\" alt=\"\\1\"/>",$msg);
			$msg=eregi_replace("([a-z]+)\.gif\>","",$msg);
			####
			
			$msg = preg_replace("#\[link\=http\:\/\/(.*?)\](.*?)\[\/link\]#ei", "'<a href=\"go.php?'.base64_encode('http://'.mb_substr(\"\\1\", 0, 200, 'UTF-8')).'\">'.mb_substr(\"\\2\", 0, 40, 'UTF-8').'</a>'", $msg);
			
			$msg = nl2br($msg);
			$msg = str_replace('<br />', '<br/>', $msg);
			
			# Ограничение по количеству сообщений в минуту для анонимусов
			if($uid==3 and !$edit){
				$c_last = mysql_result(mysql_query("SELECT COUNT(`id`) FROM `wip_forum_messages` WHERE `an_id`='".$an_id."' AND `time`>'".(time()-60)."';"), 0);
				
				if($c_last>=3){
					echo 'Вы не можете так часто отвечать на форуме! Перезагрузите страницу через минуту.<br/>'.
					'<a href="forum_messages.php?tid='.$tid.'&amp;s='.$s.'">В тему</a><br/>';
					break;
				}
			}
			###
			
			# Проверка на боян (если добавляем сообщение)
			if(!$edit) mysql_query("SELECT `id` FROM `wip_forum_messages` WHERE `tid`='".$tid."' AND `msg`='".$msg."';");
			
			if(mysql_affected_rows()>0 and !$edit){
				echo 'Вы уже писали это сообщение в теме<br/>---<br/>';
			}
			###
			
			else {
				
				if(!$user) $add_an_id = ", `an_id`='".$an_id."'";
				else $add_an_id = false;	
				
				# Добавляем сообщение
				if(!$edit) $ins = mysql_query("INSERT INTO `wip_forum_messages` SET `fid`='".$topic['fid']."', `tid`='".$tid."', `uid`='".$uid."', `time`='".time()."', `msg`='".$msg."' ".$add_an_id.";");
				else {
					if($_POST['del']==1) $ins = mysql_query("DELETE FROM `wip_forum_messages` WHERE `id`='".$mid."';");
					else $ins = mysql_query("UPDATE `wip_forum_messages` SET `msg`='".$msg."' WHERE `id`='".$mid."';");
				}
				
				# Обновляем посты
				if(!$edit or $_POST['del']==1) mysql_query("UPDATE `wip_users` SET `forum_posts` = `forum_posts` +1 WHERE `id`='".$uid."';");
				
				# Обновляем время последнего ответа, если тема не закреплена
				if ($topic['last'] != 'lock' and !$edit) mysql_query("UPDATE `wip_forum_topics` SET `last`='".time()."' WHERE `id`='".$tid."';");
				
				if(!$ins) echo 'Ошибка при добавлении сообщения!<br/>---<br/>';
			}
		}
		###
		
		# Постраничный вывод
		$mlim = ($user) ? $user['forum_mlim'] : 10;
		
		if (!$s or $s<=0) $s=1;
		$all = mysql_result(mysql_query("SELECT COUNT(`id`) FROM `wip_forum_messages` WHERE `tid`='".$tid."';"), 0);
		$pgs=ceil($all / $mlim);
		if($s > $pgs) $s = $pgs;
		$n = ($s-1) * $mlim;
		###
		
		
		# "Шапка темы"
		echo '<a href="forums.php?'.$sess.'">Форумы</a> | <a href="forum_topics.php?'.$sess.'fid='.$topic['fid'].'">'.$topic['forum'].'</a> | <b>'.$topic['topic'].'</b><br/>';
		
		#echo '<b>'.$topic['topic'].'</b><br/>';
		
		# Условие для отображения "Ответить". Работает РУКАМИ НЕ ТРОГАТЬ!!!!!!!
		if(!$ban_cookie and ( ($topic['write']==0 and !$user) or $user) and $topic['close']==0 and ($uid!=3 or ($uid==3 and !$an_id))) echo '<a href="forum_messages.php?'.$sess.'tid='.$tid.'&amp;mod=new_msg&amp;s='.$s.'&amp;r='.rand(100, 500).'">Ответить</a> | ';
		
		echo '<a href="forum_messages.php?'.$sess.'tid='.$tid.'&amp;s='.$pgs.'&amp;r='.rand(100, 500).'">Обновить</a><br/>';
		
		if($topic['close']==1) echo '<b>Тема закрыта!</b><br/>';
		elseif($topic['write']==1) echo '<b>Ограничение:</b> отвечать в теме могут только зарегистрированные юзеры<br/>';
		
		echo '---<br/>';
		###
		
		$select = mysql_query("SELECT `u`.`nick`, `m`.`uid`, `m`.`time`, `m`.`msg`, `m`.`id`, `m`.`an_id` FROM `wip_forum_messages` AS `m`, `wip_users` AS `u` WHERE `m`.`tid`='".$tid."' AND `u`.`id`=`m`.`uid` AND ((`u`.`forum_full_ignor`=1 AND `u`.`id`='".$uid."') OR (`u`.`forum_full_ignor`=0)) ORDER BY `m`.`id` LIMIT ".$n.", ".$mlim.";");
		
		if(mysql_affected_rows()<1){
			echo 'В этой теме сообщений нет<br/>';
		}
		
		else {
			
			$today = date('d.m.Y');
			
			$np = $n+1;
			
			while($res = mysql_fetch_assoc($select)){
				
				$date = (date('d.m.Y', $res['time']) == $today) ? 'сегодня '.date('H:i', $res['time']) : date('d.m.Y H:i', $res['time']);
				
				echo ''.$np.'. '; 
				
				if(!$user /*or $user['id'] == $res['uid']*/ or $res['uid']==3) echo '<b>'.$res['nick'].'</b>';
				else echo '<b><a href="user.php?'.$sess.'uid='.$res['uid'].'&amp;tid='.$tid.'">'.$res['nick'].'</a></b>';
				
				if($res['uid']==3 and ($user['forum_admin'] or $user['forum_moder'])){
					$page = ($user['forum_admin']) ? 'forum_admin' : 'forum_moder';
					
					echo ' [id='.$res['an_id'].', <a href="'.$page.'.php?sid='.$sid.'&amp;mod=ban_an_id&amp;an_id='.$res['an_id'].'">бан</a>]';
				}
				
				echo ', '.$date.'<br/>'.$res['msg'].' ';
		
				if($res['uid']==$user['id'] or $user['forum_admin'] or $user['forum_moder']) echo '<a href="forum_messages.php?sid='.$sid.'&amp;tid='.$tid.'&amp;mod=new_msg&amp;mid='.$res['id'].'">[изм]</a>';
				
				echo '<br/>---<br/>';
				
				$np++;
			}
			
			# Список страниц
			if ($all > $mlim){
				if ($pgs>3 and $s>2) echo '<a href="forum_messages.php?'.$sess.'tid='.$tid.'&amp;s=1">1</a>...';
	
				$beg=$s-1; $end=$s+1;
				if ($end>$pgs+1){
					$end=$pgs; $beg=$beg-2;
				}
				elseif ($end>$pgs){
					$end=$pgs; $beg=$beg-1;
				}
				
				for($m=$beg;$m<=$end;$m++){
					if ($m<=0) $end++;
					
					else{
						if($m==$s) echo '<b>'.$m.'</b>';
						else echo '<a href="forum_messages.php?'.$sess.'tid='.$tid.'&amp;s='.$m.'">'.$m.'</a>';
			
						if($m!=$end) echo '-';
					}
				
					if ($end>$pgs) $end=$pgs;
				}
	
				if ($pgs>3 and $s<=($pgs-2)) echo '...<a href="forum_messages.php?'.$sess.'tid='.$tid.'&amp;s='.$pgs.'">'.$pgs.'</a>';
				
				echo '<br/>---<br/>';
			}
		}
		
		# Условие для отображения "Ответить". Работает РУКАМИ НЕ ТРОГАТЬ!!!!!!!
		if(!$ban_cookie and ( ($topic['write']==0 and !$user) or $user) and $topic['close']==0 and ($uid!=3 or ($uid==3 and !$an_id))) echo '<a href="forum_messages.php?'.$sess.'tid='.$tid.'&amp;mod=new_msg&amp;s='.$s.'&amp;r='.rand(100, 500).'">Ответить</a> | ';
		echo '<a href="forum_messages.php?'.$sess.'tid='.$tid.'&amp;s='.$pgs.'&amp;r='.rand(100, 500).'">Обновить</a>';
		
		echo '<br/>';
		
		echo '<a href="forums.php?'.$sess.'">Форумы</a> | <a href="forum_topics.php?'.$sess.'fid='.$topic['fid'].'">'.$topic['forum'].'</a> | <b>'.$topic['topic'].'</b><br/>';
		echo '</small>';
		break;
		
	# Новое сообщение
	case 'new_msg':
		if($uid==3 and $an_ban==true){
			head('Ошибка!', 15, 'forums.php?'.$sess);
			echo '<small><b>Вы не можете отвечать в теме!</b></small>';
			foot();
			exit();
		}
		
		###
		$mlim = ($user) ? $user['forum_mlim'] : 10;
		
		$all = mysql_result(mysql_query("SELECT COUNT(`id`) FROM `wip_forum_messages` WHERE `tid`='".$tid."';"), 0);
		$pgs=ceil($all / $mlim);
		###
		
		@$r = intval($_GET['r']);
		$edit = false;
		
		if($mid){
			$select = mysql_query("SELECT `uid`, `msg` FROM `wip_forum_messages` WHERE `id`='".$mid."';");
			
			if(mysql_affected_rows()>0){
				if($user['forum_moder'] or $user['forum_admin']) $edit = true;
				
				$res = mysql_fetch_assoc($select);
				if($res['uid'] == $user['id']) $edit = true;
			}
		}
		
		if($edit == false){
			$title = 'Ответить';
			$value = false;
			$lnk = false;
		}
		else {
			$title = 'Изменить';
			$value = $res['msg'];
			$lnk = '&amp;mid='.$mid;
		}
		
		head($title);
		
		echo '<small><a href="forum_messages.php?'.$sess.'tid='.$tid.'&amp;s='.$s.'">'.$topic['topic'].'</a> | <b>'.$title.'</b><br/>';
		echo '---<br/>';
		echo 'Сообщение:</small> <input name="msg'.$ref.'" type="text" value="'.$value.'" maxlength="1000"/><br/>';
		if($edit){
			echo '<select multiple="true" name="del">';
			echo '<option value="1">Удалить</option>';
			echo '</select><br/>';
		}
		echo '<small><anchor>'.$title.'<go href="forum_messages.php?'.$sess.'tid='.$tid.'&amp;s='.($pgs+1).''.$lnk.'" method="post">';
		echo '<postfield name="msg" value="$(msg'.$ref.')"/>';
		echo '<postfield name="del" value="$(del)"/>';
		echo '</go></anchor></small><br/>';
		break;
	
}



echo '<small>';
if($mod){
	echo '---<br/>';
	echo '<anchor>Назад<prev/></anchor><br/>';
}

if($user) echo '<a href="enter.php?'.$sess.'">Главное меню</a>';

echo '</small>';
foot();

mysql_close($link);
?>