";}
if (is_file("$fskin/tiptop.html")) {include("$fskin/tiptop.html");} // подключаем дополнение к ВЕРХУШКе
print"
Днес: $date - $time";
echo "
";
return true;}
function prcmp ($a, $b) {if ($a==$b) return 0; if ($a<$b) return -1; return 1;} // Функция сортиране
function replacer ($text) { // ФУНКЦИЯ изчистване на кода
$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=preg_replace("/\n/",' ',$text);
$text=preg_replace("/\\\$/",'$',$text);
$text=preg_replace("/\r/",'',$text);
$text=preg_replace("/\\\/",'\',$text);
if (get_magic_quotes_gpc()) {
$text=str_replace("\"",'"',$text);
$text=str_replace("\'",'\'',$text);
$text=str_replace("\\",'\',$text);
} // если magic_quotes включена - чистим везде СЛЭШи в этих случаях:
// одиночные (') и двойные кавычки ("), обратный слеш (\)
$text=str_replace("\r\n"," ",$text);
$text=str_replace("\n\n",'
',$text);
$text=str_replace("\n",' ',$text);
$text=str_replace("\t",'',$text);
$text=str_replace("\r",'',$text);
$text=str_replace(' ',' ',$text);
return $text; }
//--А-Н-Т-И-С-П-А-М--
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'];}
if (isset($_POST['maxzd'])) {$maxzd=$_POST['maxzd'];} else {$maxzd="0";} if ($maxzd==null) {$maxzd="0";}
if ((!ctype_digit($maxzd)) or (strlen($maxzd)>2)) {exit("$back. Опит за влизане с Взлом или грешка във файл статистика");}
// защита по топику fid
if (!ctype_digit($fid) or strlen($fid)>3) {exit("$back. Опит за влизане с взлом чрез номер на рубрика. Номера трябва да съдържа 4 символа");}
//--А-Н-Т-И-С-П-А-М--проверка кода--
if ($antispam!="0" and !isset($_COOKIE['wrfcookies'])) {
$bada="$back Въведения код не е верене!!";
if (isset($_POST['usernum'])) {$usernum=$_POST['usernum'];} else {exit("$bada");}
if (isset($_POST['xkey'])) {$xkey=$_POST['xkey'];} else {exit("$bada");}
$userkey=md5("$usernum+$absrand");
if ($userkey!=$xkey) {exit("$bada");}}
//--А-Н-Т-И-С-П-А-М--проверка кода--
// проходим по всем разделам и топикам - ищем запращиваемый
// на тот случай, если 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) {exit("$back. Проблем с базата данни, файла е празен - обърнете се към администратор");}
$i=count($mainlines);
$realfid=null;
do {$i--; $dt=explode("|", $mainlines[$i]);
if ($dt[0]==$fid) {$realfid=$i; if ($dt[1]=="razdel") {exit("$back. Не съществуват данни във форума");}} // присваиваем $realfid - № п/п строки
} while($i>0);
if (!isset($realfid)) {exit("$back. Грешка с номера на рубриката. Не същесвува в рубриката");}
$dt=explode("|",$mainlines[$realfid]);
if (is_file("$datadir/topic$fid.dat")) {$tlines=file("$datadir/topic$fid.dat"); $tc=count($tlines)-2; $i=$tc+2; $ok=null;
// нужно пробежаться по топику, найти тему. Если есть - нормуль, нету - значит добавление сообщений ЗАПРЕЩЕНО!
if ($_GET['event']=="addanswer") {
do {$i--; $tdt=explode("|", $tlines[$i]);
if ($tdt[7]==$id) {$ok=1; if ($tdt[8]=="closed") {exit("$back. Темата е закрита. Забранено е изпращане на съобщения!");} }
} while($i>0);
if ($ok!=1) {exit("$back тема е закрита. Изпращането на съобщяния е забранено!");} }
} else {$tc="2";}
if ($dt[11]>0) {if ($tc>=$dt[11]) {exit("$back. Превишен е лимита на допустимите теми в тази рубрика! Не е добавена $dt[11] тема!");}}
// проверка Логина/Пароля юзера. Может он хакер, тогда облом ему
// Этап 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=null; $wrfname=null; $wrfpass=null;}
// Этап 2
if ($who!=null) {
if ($wrfname!=null & $wrfpass!=null) {
$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]) {$name=$wrfname; $ok="$i";}}
} while($i > "1");
if (!isset($ok)) {setcookie("wrfcookies","",time()); exit("Грешка при работа с БИСКВИТКИ! Вие не можете да оставите съобщение, пробвайте като гост. Вашието Потребителско име и Парола не са отркрити в базата данни, пробвайте да се регистрирате. Тази грешка се повтаря - обърнете се към администратора на форума.");}
}}
print"
";
if ($_GET['event']=="addtopic" and $cangutema=="0" and !isset($wrfname)) {exit("
Администратора е забранил гости да създават тема!
");}
if ($_GET['event']=="addanswer" and $cangumsg=="0" and !isset($wrfname)) {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.="..";}
// генерируем имя файлу с темой
if ($_GET['event'] =="addtopic") {$add=null; $z=null; do {$id=mt_rand(1000,9999); if ($fid<10) {$add="0";} if (!is_file("$datadir/$add$fid$id.dat") and strlen($id)==4) {$z++;} } while ($z<1); $id="$add$fid$id";}
if ((!ctype_digit($id)) or (strlen($id)>15)) {exit("$back. Задъжително е номера на темата да е число. Критична грешка в скрипта или опит за взлом");}
if (strlen(ltrim($zag))<3) {exit("$back ! Грешка при въвеждане на данни!");}
$text="$name|$who|$email|$zag|$msg|$date|$time|$id||$tektime|$smname|$smzag|||";
$text=replacer($text); $exd=explode("|",$text);
$name=$exd[0]; $zag=$exd[3]; $smname=$exd[10]; $smzag=$exd[11]; $smmsg=$exd[4];
if (!isset($name) || strlen($name) > $maxname || strlen($name) <1) {exit("$back. Вашето име е празно или превишава $maxname символа!");}
if (preg_match("/[^(\\w)|(\\x7F-\\xFF)|(\\-)]/",$name)) {exit("$back. Вашето име съдържа забранени символи. Разрешени са Български и Английски букви, цифри, долни черти и тире.");}
if (strlen(ltrim($zag))<3 || strlen($zag) > $maxzag) {exit("$back Не е въведено име на темата или превишава $maxzag символа!");}
if (strlen(ltrim($msg))<2 || strlen($msg) > $maxmsg) {exit("$back Вашето съобщение е много кратко или превишава $maxmsg символа.");}
if (!preg_match("/^([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 != "") {exit("$back и въведете коректен E-mail адрес!");}
// функция АНТИФЛУД здесь - повторное добавление сообщения/темы запрещено!
if (isset($tlines)) {
if ($tc<"-1") {$sdt[0]=null; $sdt[3]=null;} else {$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"
// ЕСЛИ введена команда АП, то меняем дату создания файла и тема самая первая будет
if ($_GET['event'] =="addanswer") { //при ОТВЕТе В ТЕМЕ
// Проверяем, давно ли реактивировали тему
$timetek=time(); $timefile=filemtime("$datadir/$id.dat");
$timer=$timetek-$timefile; // узнаем сколько прошло времени (в секундах)
// $timer<10 - 10 секунд защита от антифлуда
if ($smmsg=="ап!") {
if ($timer<10 and $timer>0) {exit("$back темата ще е активна след $timer секунди.");}
touch("$datadir/$id.dat");
print "
Благодаря, $name, темата е редактирана.
След няколко секунди ще бъдете автоматично прехвърлене в текущата тема! $zag.
";
exit; }
if ($timer<10 and $timer>0) {exit("$back. Темата ще е активна след $timer секунди.");}
}
$razdelname="";
if ($realbase=="1" and $maxzd<1) { // Если подключена рабочая база, а не копия
$lines=file("$datadir/mainforum.dat"); $max=sizeof($lines)-1;
$dt=explode("|", $lines[$realfid]); $dt[5]++;
if ($_GET['event']=="addtopic") {$dt[4]++;}
// НЕ менять 4-е строки до 2009 года. пусть как написано так и будет!
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<=$max;$i++) {if ($i==$realfid) {fputs($fp,"$txtdat\r\n");} else {fputs($fp,$lines[$i]);}}
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
} // if ($realbase=="1")
if ($newmess=="1" and $maxzd<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 ($id!=$ndt[1]) {$newlineexit.="$newlines[$i]"; $i2++;}}
}
// Записываем свежее сообщение в массив и далее сохраняем его в файл
if ($maxzd<1) { // Если тема доступна для всех - нет ограничений по звёздам
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);}
}
}
} // if ($newmess=="1")
// БЛОК добавляет +1 к репе и +1 к сообщению или +1 к кол-ву тем, созданных юзером
if (isset($_COOKIE['wrfcookies']) and (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[3]++; $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);
// Пишем В ТЕМУ
$fp=fopen("$datadir/$id.dat","a+");
flock ($fp,LOCK_EX);
fputs($fp,"$text\r\n");
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
print "
Благодаря, $name, за добавената тема!
След няколко секунди ще бъдете автоматично прехвърлени в създадената тема.