// WR-forum v 1.8.2M // 20.01.08 г. // Miha-ingener@yandex.ru
#error_reporting (E_ALL);
include "config.php";
$maxzd = null;
// Функция содержит ПРОДОЛЖЕНИЕ ШАПКИ. Вызывается: addtop();
function addtop() { global $wrfname,$fskin,$date,$time;
// ищем В КУКАХ wrfcookies чтобы вывести ИМЯ
if (isset($_COOKIE['wrfcookies'])) {$wrfc=$_COOKIE['wrfcookies']; $wrfc=htmlspecialchars($wrfc); $wrfc=stripslashes($wrfc); $wrfc=explode("|", $wrfc); $wrfname=$wrfc[0];} else {unset($wrfname); unset($wrfpass);}
print"
";}
if (is_file("$fskin/tiptop.html")) {include("$fskin/tiptop.html");} // подключаем дополнение к ВЕРХУШКе
print"Сегодня: $date - $time";
return true;}
function prcmp ($a, $b) {if ($a==$b) return 0; if ($a<$b) return -1; return 1;} // Функция сортировки
//--А-Н-Т-И-С-П-А-М--
if (isset($_GET['image'])) {
// Функция с цифрами защиты
$st="R0lGODlhCgAMAIABAFNTU////yH5BAEAAAEALAAAAAAKAAwAAAI"; // общая часть для всех рисунков
function imgwr($st,$num){
if ($num=="0") {$len="63"; $number=$st."WjIFgi6e+QpMP0jin1bfv2nFaBlJaAQA7";}
if ($num=="1") {$len="61"; $number=$st."UjA1wG8noXlJsUnlrXhE/+DXb0RUAOw==";}
if ($num=="2") {$len="64"; $number=$st."XjIFgi6e+QpMPRlbjvFtnfFnchyVJUAAAOw==";}
if ($num=="3") {$len="64"; $number=$st."XjIFgi6e+Qovs0RkTzXbj+3yTJnUlVgAAOw==";}
if ($num=="4") {$len="64"; $number=$st."XjA9wG8mWFIty0amczbVJDVHg9oSlZxQAOw==";}
if ($num=="5") {$len="63"; $number=$st."WTIAJdsuPHovSKGoprhs67mzaJypMAQA7";}
if ($num=="6") {$len="63"; $number=$st."WjIFoB6vxmFw0pfpihI3jOW1at3FRAQA7";}
if ($num=="7") {$len="61"; $number=$st."UDI4Xy6vtAIzTyPpg1ndu9oEdNxUAOw==";}
if ($num=="8") {$len="63"; $number=$st."WjIFgi6e+QpMP2slSpJbn7mFeWDlYAQA7";}
if ($num=="9") {$len="64"; $number=$st."XjIFgi6e+QpMP0jinvbT2FGGPxmlkohUAOw==";}
header("Content-type: image/gif");
header("Content-length: $len");
echo base64_decode($number); }
// Вывод изображений на экран (все кодированы - робот не пройдёт)
if (array_key_exists("image", $_REQUEST)) { $num=$_REQUEST["image"];
for ($i=0; $i<10; $i++) {if (md5($i+$absrand)==$num) {imgwr($st,$i); die();}} }
exit;}
// Выбран ВЫХОД из форума - очищаем куки
if(isset($_GET['event'])) {if ($_GET['event']=="clearcooke") {setcookie("wrfcookies","",time()); Header("Location: index.php"); exit;}}
// ДОБАВЛЕНИЕ ТЕМЫ или ОТВЕТА - ШАГ 1
if(isset($_GET['event'])) {
if (($_GET['event']=="addtopic") or ($_GET['event']=="addanswer")) {
if (isset($_POST['name'])) {$name=$_POST['name'];}
$name=trim($name); // Вырезает ПРОБЕЛьные символы
$zag=$_POST['zag']; $msg=$_POST['msg']; $fid=$_GET['fid'];
if (isset($_POST['who'])) {$who=$_POST['who'];} else {$who="";}
if (isset($_POST['email'])) {$email=$_POST['email'];} else {$email="";}
if (isset($_POST['page'])) {$page=$_POST['page'];}
if ($_GET['event']=="addanswer") {$id=$_POST['id'];}
print"";
// защита по топику - fid
if (!ctype_digit($fid) or strlen($fid)>2) {exit("$back. Попытка взлома. Хакерам здесь не место.");}
//--А-Н-Т-И-С-П-А-М--проверка кода--
if ($antispam!="0" and !isset($_COOKIE['wrfcookies'])) {
$bada="$back Введённый вами код НЕ верен!";
if (isset($_POST['usernum'])) {$usernum=$_POST['usernum'];} else {print"$bada"; exit;}
if (isset($_POST['xkey'])) {$xkey=$_POST['xkey'];} else {print"$bada"; exit;}
$userkey=md5("$usernum+$absrand");
if ($userkey!=$xkey) {print"$bada"; exit;}}
//--А-Н-Т-И-С-П-А-М--проверка кода--
// проходим по всем разделам и топикам - ищем запращиваемый
// на тот случай, если mainforum.dat - пуст, подключаем резервную копию
$realbase="1"; if (is_file("$datadir/mainforum.dat")) {$mainlines=file("$datadir/mainforum.dat");}
if (!isset($mainlines)) {$datasize=0;} else {$datasize=sizeof($mainlines);}
if ($datasize<=0) {if (is_file("$datadir/copy.dat")) {$realbase="0"; $mainlines=file("$datadir/copy.dat"); $datasize=sizeof($mainlines);}}
if ($datasize<=0) {print "Проблемы с Базой данных - обратитесь к администратору"; exit;}
$i=count($mainlines);
do {$i--; $dt=explode("|", $mainlines[$i]);
if ($dt[0]==$fid) {$realfid=$i; if ($dt[1]=="razdel") {exit(" Попытка взлома.");}} // присваиваем $realfid - № п/п строки
} while($i>0);
if (!isset($realfid)) {print"Ошибка."; exit;}
$dt=explode("|",$mainlines[$realfid]);
if (is_file("$datadir/topic$fid.dat")) {$tlines=file("$datadir/topic$fid.dat"); $tc=count($tlines)-2;} else {$tc="2";}
if ($dt[11]>0) {if ($tc>=$dt[11]) {print "$back Превышено ограничение на кол-во допустимых тем в данной рубрике! Не более $dt[11] тем!"; exit;}}
// проверка Логина/Пароля юзера. Может он хакер, тогда обломаем его.
// Этап 1
if (isset($_COOKIE['wrfcookies'])) {
$wrfc=$_COOKIE['wrfcookies']; $wrfc=htmlspecialchars($wrfc); $wrfc=stripslashes($wrfc);
$wrfc=explode("|", $wrfc); $wrfname=$wrfc[0]; $wrfpass=$wrfc[1];
} else {$who=""; unset($wrfname); unset($wrfpass);}
// Этап 2
if ($who=="да") {
if (isset($wrfname) & isset($wrfpass)) {
$lines=file("$datadir/usersdat.php"); $i=count($lines);
do {$i--; $rdt=explode("|", $lines[$i]);
if (isset($rdt[1])) { $realname=strtolower($rdt[0]);
if (strtolower($wrfname)===$realname & $wrfpass===$rdt[1]) {$ok="$i";}}
} while($i > "1");
if (!isset($ok)) {setcookie("wrfcookies","",time()); print "Ошибка при работе с КУКИ! Вы не сможете оставить сообщение, попробуйте подать его как гость."; exit;}
}}
if ($_GET['event']=="addtopic" and $cangutema=="0" and !isset($wrfname)) {print"
Администратор запретил гостям создавать темы!
"; exit;}
if ($_GET['event']=="addanswer" and $cangumsg=="0" and !isset($wrfname)) {print"
Администратор запретил гостям отвечать в темах!
"; exit;}
if (!isset($name) || strlen($name) > $maxname || strlen($name) <1) {print "$back Ваше ИМЯ пустое, или превышает $maxname символов!"; exit;}
if (strlen(ltrim($zag))<3 || strlen($zag) > $maxzag) {print "$back Слишком короткое название темы или название превышает $maxzag символов!"; exit;}
if (strlen(ltrim($msg))<3 || strlen($msg) > $maxmsg) {print "$back Ваше сообщение короткое или превышает $maxmsg символов."; exit;}
if (!eregi("^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)$", $email) and strlen($email) > 30 and $email != "")
{print "$back и введите корректный E-mail адрес!"; exit;}
if ($_GET['event'] =="addtopic") {$tt=explode(' ', microtime()); $ttt="$tt[1]"+"$tt[0]"; $ttf=str_replace(".","",$ttt); $id=$ttf; $id=substr("$id",2);}
if (!ctype_digit($id) or strlen($id)>15) {exit("$back. Попытка взлома. Хакерам здесь не место.");}
if (strlen(ltrim($zag))<3) {print"$back !"; exit;}
$tektime=time();
$name=wordwrap($name,30,' ',1); // разрываем длинные строки
$zag==wordwrap($zag,30,' ',1);
$msg=wordwrap($msg,110,' ',1);
$name=str_replace("|","I",$name);
$who=str_replace("|","|",$who);
$email=str_replace("|","|",$email);
$zag=str_replace("|","|",$zag);
$msg=str_replace("|","|",$msg);
$smname=$name; if (strlen($name)>18) {$smname=substr($name,0,18); $smname.="..";}
$smzag=$zag; if (strlen($zag)>24) {$smzag=substr($zag,0,24); $smzag.="..";}
$text="$name|$who|$email|$zag|$msg|$date|$time|$id||$tektime|$smname|$smzag|||";
$text=str_replace(" ",' ',$text);
$text=str_replace("&",'&',$text);
$text=str_replace(">",'>',$text);
$text=str_replace("<",'<',$text);
$text=str_replace("\"",'"',$text);
$text=preg_replace("/\n\n/",'
',$text);
$text=str_replace("\n",' ',$text);
$text=str_replace("\t",'',$text);
$text=str_replace("\r",'',$text);
$text=str_replace(' ',' ',$text);
$exd=explode("|",$text);
$name=$exd[0]; $zag=$exd[3]; $smname=$exd[10]; $smzag=$exd[11]; $smmsg=$exd[4];
// функция АНТИФЛУД здесь - повторное добавление сообщения/темы запрещено!
if (isset($tlines)) {$last=$tlines[$tc+1]; $sdt=explode("|",$last);
if ($_GET['event'] =="addtopic") { // ЕСЛИ добавление ТЕМЫ: имя = имя в файле, тема = последняя тема в файле
if ($name==$sdt[0] and $exd[3]==$sdt[3]) {exit("$back. Такая тема уже создана. Спамить на форуме запрещено!");}
} else { // ЕСЛИ добавление сообщения: имя = имя в файле, сообщение = последнему сообщению в файле
if (is_file("$datadir/$id.dat")) {$linesn=file("$datadir/$id.dat"); $in=count($linesn)-1;
if ($in > 0) { $dtf=explode("|",$linesn[$in]);
if ($name==$dtf[0] and $exd[4]==$dtf[4]) {exit("$back. Такое сообщение уже размещено в данной теме. Спамить на форуме запрещено!");}}
}
}} // if $event=="addtopic"
$razdelname="";
if ($realbase=="1") { // Если подключена рабочая база, а не копия
$lines=file("$datadir/mainforum.dat");
$dt=explode("|", $lines[$realfid]); $dt[5]++;
if ($_GET['event']=="addtopic") {$dt[4]++;}
// НЕ менять 4-е строки пусть как написано так и будет!
if (!isset($dt[11])) {$dt[11]="100";} $dt[11]=str_replace("
", " ", $dt[11]);
if (!isset($dt[12])) {$dt[12]="";} $dt[12]=str_replace("
", " ", $dt[12]);
$txtdat="$dt[0]|$dt[1]|$dt[2]|$id|$dt[4]|$dt[5]|$smname|$date|$time|$tektime|$smzag|$dt[11]|$dt[12]||";
$razdelname=$dt[1];
// запись данных на главную страницу
$fp=fopen("$datadir/mainforum.dat","a+");
flock ($fp,LOCK_EX);
ftruncate ($fp,0);//УДАЛЯЕМ СОДЕРЖИМОЕ ФАЙЛА
for ($i=0;$i<=(sizeof($lines)-1);$i++) {if ($i==$realfid) {fputs($fp,"$txtdat\r\n");} else {fputs($fp,$lines[$i]);}}
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
@chmod("$datadir/mainforum.dat", 0644);
} // if ($realbase=="1")
if ($newmess=="1") { // запись в отдельный файл нового сообщения
if (is_file("$datadir/topic$fid.dat")) {$nlines=count(file("$datadir/topic$fid.dat"));} else {$nlines=1;}
if (is_file("$datadir/$id.dat")) {$nlines2=count(file("$datadir/$id.dat"))+1;} else {$nlines2=1;}
$newmessfile="$datadir/news.dat";
$newlines=file("$newmessfile"); $ni=count($newlines)-1; $i2=0; $newlineexit="";
$nmsg=substr($msg,0,150); // образаем сообщение до 150 символов
$ntext="$fid|$id|$date|$time|$smname|$zag|$nmsg...|$nlines|$nlines2|$razdelname|$who||||";
$ntext=str_replace("
", " ", $ntext);
// Блок проверяет, есть ли уже новое сообщение в этой теме. Если есть - отсеивает. На выходе - массив без этой строки.
for ($i=0;$i<=$ni;$i++)
{ $ndt=explode("|",$newlines[$i]);
if (isset($ndt[1])) {if ($ndt[1]!=$id) {$newlineexit.="$newlines[$i]"; $i2++;}}
}
// Записываем свежее сообщение в массив и далее сохраняем его в файл
if ($i2>0) { // Если есть такая тема, то пишем весь массив, иначе тока строку
$newlineexit.=$ntext;
$fp=fopen("$newmessfile","w");
flock ($fp,LOCK_EX);
fputs($fp,"$newlineexit\r\n");
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
} else {
$fp=fopen("$newmessfile","a+");
flock ($fp,LOCK_EX);
fputs($fp,"$ntext\r\n");
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp); }
$file=file($newmessfile);$i=count($file);
if ($i>="15") {
$fp=fopen($newmessfile,"w");
flock ($fp,LOCK_EX);
unset($file[0]);
fputs($fp, implode("",$file));
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
@chmod("$newmessfile", 0644);
}
}
} // if ($newmess=="1")
// БЛОК добавляет +1 к сообщению или +1 к кол-ву тем, созданных юзером
//ИМЯ_ЮЗЕРА|Тем|Сообщений|Репутация|Предупреждения Х/5|Когда последний раз меняли рейтинг в UNIX формате|||
if (isset($ok)) {
$ufile="$datadir/userstat.dat"; $ulines=file("$ufile"); $ui=count($ulines)-1; $ulinenew="";
// Ищем юзера по имени в файле userstat.dat
for ($i=0;$i<=$ui;$i++) {$udt=explode("|",$ulines[$i]);
if ($udt[0]==$wrfname) {
$udt[2]++; if ($_GET['event']=="addtopic") {$udt[1]++;}
$ulines[$i]="$udt[0]|$udt[1]|$udt[2]|$udt[3]|$udt[4]|$udt[5]||||\r\n";}
$ulinenew.="$ulines[$i]";}
// Записываем данные в файл
$fp=fopen("$ufile","w");
flock ($fp,LOCK_EX);
fputs($fp,"$ulinenew");
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
} // if isset($ok)
if ($_GET['event'] =="addtopic") { // Добавление ТЕМЫ
// запись данных В ТОПИК
$fp=fopen("$datadir/topic$fid.dat","a+");
flock ($fp,LOCK_EX);
fputs($fp,"$text\r\n");
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
@chmod("$datadir/topic$fid.dat", 0644);
// запись данных В ТЕМУ
$fp=fopen("$datadir/$id.dat","a+");
flock ($fp,LOCK_EX);
fputs($fp,"$text\r\n");
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
@chmod("$datadir/$id.dat", 0644);
print "
Спасибо, $name, за добавление темы!
Через несколько секунд Вы будете автоматически перемещены в созданную тему.
";
exit;
}
if ($_GET['event'] =="addanswer") { //ОТВЕТ В ТЕМЕ - запись данных
$fp=fopen("$datadir/$id.dat","a+");
flock ($fp,LOCK_EX);
fputs($fp,"$text\r\n");
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
@chmod("$datadir/$id.dat", 0644);
$in=$in+2; $page=ceil(($in)/$qq); // расчитываем верную страницу и номер сообщения
print "
Спасибо, $name, Ваш ответ успешно добавлен.
Через несколько секунд Вы будете автоматически перемещены в текущую тему $zag.