- <?php
- error_reporting(7);
-
- $name=explode('.',$_SERVER['HTTP_X_FORWARDED_HOST']);
- $user=strtolower($name[0]);
- $domain=strtolower($name[1]);
- $path='/home/kmx/www/sites/'.$domain.'/'.$user.'/';
- if (!is_dir($path.'.')) {header('Location: http://kmx.ru/?not_found');exit;}
-
- $nocache=rand(1000,9999);
-
- $f=@fopen($path.'services.dat','r');
- $servicelist=@fread($f,1024);
- @fclose($f);
- $offservice=(!strpos(';'.$servicelist.';', 'chat10;'));
-
- $name=strtoupper($user).'-чат';
-
- Header("Content-type:text/vnd.wap.wml; charset=Utf-8");
- Header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
- Header("Cache-Control: no-cache, must-relative");
-
- $wml="<?xml version=\"1.0\" encoding=\"Utf-8\"?><!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.2//EN\" \"http://www.wapforum.org/DTD/wml_1.2.xml\"><wml>";
- if ($offservice) die ($wml.'<card id="chat" title="'.$name.'"><p align="center">Данная услуга автором сайта не заказана...<br/><anchor>Назад<prev/></anchor></p></card></wml>');
-
- touch($path."chat.msg");
- if (!file_exists($path."chat.usr"))
- {
- define("DBName","kmx");
- define("HostName","localhost");
- define("UserName","kmx");
- define("Password","kmx-hosting");
-
- $connectserv=@mysql_connect(HostName, UserName, Password);
- $selectDB=@mysql_select_db(DBName);
- $connect_bd=(($connectserv!=0)&&($selectDB!=0));
-
- if (!$connect_bd) include($rootpath."mysqlerror.php");
-
- $q=@mysql(DBName,"SELECT `pass` FROM `users` WHERE `domain` = '".addslashes($domain)."' AND `login` = '".addslashes($user)."' LIMIT 0, 1");
- $data=mysql_fetch_array($q);
- $pass=$data['pass'];
- $f=fopen($path.'chat.usr','w+');
- fwrite($f,$user."\t".$pass."\t3\t99999\n");
- fclose($f);
- }
- touch($path."chat.cus");
-
- $u=$_SERVER['QUERY_STRING'];
- if ($HTTP_POST_VARS['u']!='') $u=$HTTP_POST_VARS['u'];
-
- $u=urldecode($u);
- $b=explode(":",str_replace("\t"," ",str_replace("\n"," ",str_replace("$","$$",htmlspecialchars(stripslashes($u))))),5);
-
- $l=trim($b[0]);
- $p=trim($b[1]);
- $c=trim($b[2]);
- $r=trim($b[3]);
- $m=trim($b[4]);
-
- #print_r($b);
- # $l - логин
- # $p - пароль
- # $c - команда
- # $r - получатель
- # $m - сообщение
-
- //Рисунки
- $i00='<img src="." alt=""/>';
- $i01='<img src="/chatlogo.gif" alt="logo"/>';
-
- //Подпись
- #$tm='<br/><br/><small>РЎrеаted bСѓ ©DРёmРѕn</small>';
- $tm='<br/><br/><small>©K-Media</small>';
-
- //Начало карты
- $c01='<card id="chat" title="'.$name.'">';
- //Конец карты
- $c98='</card>';
- //Конец и деки
- $c99='</card></wml>';
-
- //Параграф с левым выравниванием
- $p01='<p align="left">';
- //Параграф с центральным выравниванием
- $p02='<p align="center">';
- //Параграф с правым выравниванием
- $p03='<p align="right">';
- //Закрыть параграф
- $p99='</p>';
-
- $u=urlencode(html_entity_decode($l)).':'.urlencode(html_entity_decode($p)).':';
- #$u=html_entity_decode($l.':'.$p.':');
- #$u=$l.':'.$p.':';
- //Кнопка "назад"
- $a01='<br/><anchor>Назад<prev/></anchor>';
- //Кнопка "на главную"
- $a02='<br/><a href="http://'.$user.'.'.$domain.'.ru" accesskey="#">На главную</a>';
- //Кнопка "войти"
- $a03='<br/><anchor>Войти<go href="/chat10.srv" method="post" accept-charset="UTF-8"><postfield name="u" value="$(l'.$nocache.'):$(p'.$nocache.'):read"/></go></anchor>';
- //Кнопка "регистрация"
- $a04='<br/><anchor>Регистрация<go href="/chat10.srv" method="post" accept-charset="UTF-8"><postfield name="u" value="$(l'.$nocache.'):$(p'.$nocache.'):new"/></go></anchor>';
- //Кнопка "обновить"
- $a05='<br/><a href="/chat10.srv?'.$u.'read" accesskey="1">Обновить</a>';
- //Кнопка "написать"
- $a06='<br/><a href="/chat10.srv?'.$u.'write" accesskey="2">Написать</a>';
- //Кнопка "выйти"
- $a07='<br/><a href="/chat10.srv?'.$u.'quit" accesskey="*">Выйти</a>';
- //Кнопка "отправить"
- $a08='<br/><anchor>Отправить<go href="/chat10.srv" method="post" accept-charset="UTF-8"><postfield name="u" value="'.$l.':'.$p.':post:$(t'.$nocache.'):$(m'.$nocache.')"/></go></anchor>';
- //Кнопка "кто тут?"
- $a09='<br/><a href="/chat10.srv?'.$u.'who" accesskey="3">Кто тут?</a>';
-
- //Soft-Кнопка "обновить"
- $s01='<do name="a1" type="options" label="Обновить"><go href="/chat10.srv?'.$u.'read"/></do>';
- //Soft-Кнопка "написать"
- $s02='<do name="a2" type="options" label="Написать"><go href="/chat10.srv?'.$u.'write"/></do>';
- //Soft-Кнопка "кто тут?"
- $s03='<do name="a3" type="options" label="Кто тут?"><go href="/chat10.srv?'.$u.'who"/></do>';
- //Soft-Кнопка "FAQ"
- $faq='<do name="a9" type="options" label="FAQ"><go href="/chat10.srv?'.$u.'faq"/></do>';
-
- //Поле "логин"
- $f01='<br/>Логин:<br/><input type="text" name="l'.$nocache.'" title="Логин" maxlength="16" value="'.$l.'"/>';
- //Поле "пароль"
- $f02='<br/>Пароль:<br/><input type="text" emptyok="false" name="p'.$nocache.'" title="Пароль" maxlength="10" value=""/>';
- //Поле "сообщение"
- $f03='Сообщение:<br/><input name="m'.$nocache.'" type="text" title="Сообщение" value="" maxlength="150"/>';
-
- //Пустой текст
- $t00='';
- //Неправильнй логин или пароль
- $t01='Неправильный логин или пароль!';
- //Не указан логин или пароль
- $t02='Не указан логин или пароль!';
- //Вы успешно зарегистрированы
- $t03='Вы успешно зарегистрированы!';
- //Доступ временно закрыт
- $t04='<b>Доступ временно закрыт.</b>';
-
- //Таймер обновления
- $tm1='<onevent type="ontimer"><go href="/chat10.srv?'.$u.'read"/></onevent><timer value="600"/>';
-
- $st=1;
- //Авторизация
- $f=fopen($path."chat.usr","r");
- $tl=$tp=false;
- while (!$tl and !feof($f))
- {
- $tu=fgets($f,1024);$b=explode("\t",$tu);
- $cl=$b[0]; //логин
- $cp=$b[1]; //пароль
- $st=$b[2]; //статус
- $lt=$b[3]; //последний тайм-штамп
- if ($cl==trim($l)) {$tl=true;$tp=($cp==trim($p));}
- }
- fclose($f);
-
- # Не был на сайте более 100000 секунд - обновляем
- if (substr(time(),0,5)>substr($lt,0,5))
- {
- $t=file($path."chat.usr");
- $f=fopen($path."chat.usr","w+");
- for ($i=0;$i<sizeof($t);$i++)
- {
- $b=explode("\t",$t[$i]);
- fwrite($f,$b[0]."\t".$b[1]."\t".$b[2]."\t".substr(time(),0,5)."\t\n");
- }
- flock($f,3); fclose($f);
- }
-
- $ta=$tl&&$tp;
- # $tl - существование логина
- # $tp - совпадение пароля
- # $ta - успешность авторизации
-
- //Первый вход
- if (($c!='new')&&(($p=='')&&($l==''))||($c=='quit')) die($wml.$c01.$p02.$i01.$t00.$f01.$f02.$a03.$a04."<br/>".$a01.$a02.$tm.$p99.$c99);
-
- //Добавление пользователя (новый логин, логин и пароль не пустые)
- if (($c=='new')&&!$tl&&($p!='')&&($l!='')) {$f=fopen($path."chat.usr","a");fputs($f,trim($l)."\t".trim($p)."\t1\t\n");fclose($f);$ta=true;}
-
- //Добавление пользователя (логин или пароль пустые)
- if (($c=='new')&&(($p=='')||($l==''))) die($wml.$c01.$p02.$i00.$t02.$f01.$f02.$a03.$a04."<br/>".$a01.$a02.$tm.$p99.$c99);
-
- //Добавление пользователя (логин и пароль существуют и верны)
- if (($c=='new')&&$ta) die($wml.$c01.$p02.$i00.$t03.$a03."<br/>".$a01.$a02.$tm.$p99.$c99);
-
- //Аторизация не прошла
- if (($c!='new')&&!$ta) die($wml.$c01.$p02.$i00.$t01.$f01.$f02.$a03.$a04."<br/>".$a01.$a02.$tm.$p99.$c99);
-
- //Доступ запрещен
- if ($st==0) die($wml.$c01.$p02.$t04.$a01.$p99.$c99);
-
- //Обновление текущего списка посетителей
- $f=fopen($path."chat.cus","r+");
- $t=file($path."chat.cus");
- unset($cu);
- flock($f,LOCK_EX);
- $f=fopen($path."chat.cus","w");
- $cu[]=$l;
- for ($i=0;$i<sizeof($t);$i++)
- {
- $s=explode("\t",$t[$i]);
- if (($s[0]<time())||($s[1]==$l)||($s[1]=="")) continue;
- fwrite($f,$s[0]."\t".$s[1]."\t\n");
- $cu[]=$s[1];
- }
- fwrite($f,(time()+300)."\t".$l."\t\n");
- flock($f,3);fclose($f);
-
- //Выбор "Кому"
- $v01='<br/>Кому:<br/><select name="t'.$nocache.'" title="Кому" value=""><option value="">-всем-</option>';
- for ($i=0;$i<sizeof($cu);$i++) $v01.='<option value="'.$cu[$i].'">'.$cu[$i].'</option>';
- $v01.='</select>';
-
- if ($c=='write') die($wml.$c01.$oe1.$p02.$f03.$v01.$a08."<br/>".$a01.$a07.$tm.$p99.$c99);
-
- if ($c=='who')
- {
- $cu=implode("<br/>",$cu);
- die($wml.$c01.$p02."<b>В комнате:</b><br/>".$cu.$a01.$tm.$p99.$c99);
- }
-
- if ($c=='post')
- {
- $xl=$l; $xr=$r; $xm=$m;
- if (substr($m,0,1)=='#')
- {
- $m=explode(" ",$m,2);
- # Если младше чем модер
- if (($st<2))
- {
- # То выводим "Выполнение команд Вам недоступно"
- $xl=""; $xr=$l; $xm="<b>Выполнение команд вам недоступно.</b><!--".rand(100,999)."-->";
- }
- else
- {
- # Иначе обрабатываем команду
- switch ($m[0])
- {
- # Если #CLS - очищаем файл сообщений
- case "#cls" :
- {
- $f=fopen($path."chat.msg","w");fclose($f);
- $xl="";
- $xr="";
- $xm="<b>".$l." очистил(а) список сообщений.</b>";
- break;
- }
- # Если #ADMIN - очищаем файл сообщений
- case "#admin" :
- {
- $f=fopen($path."chat.msg","w");fclose($f);
- $xl="";
- $xr=$l;
- $xm="<b>В чете единственный администратор: ".$user.".</b>";
- break;
- }
- # Если операция над логином
- case "#del" :
- case "#ban" :
- case "#user" :
- case "#moder" :
- {
- # Если логин-объект не указан явно, то берем из поля "кому"
- if ($r=="") $r=$m[1];
- # Если логин-объект не определен, то выводим "Не указан логин"
- if ($r=="")
- {
- $xl="";
- $xr=$l;
- $xm="<b>Не указан логин.</b><!--".rand(100,999)."-->";
- break;
- }
- # Иначе работаем с логином
- elseif ($l==$r)
- {
- $xl="";
- $xr=$l;
- $xm="<b>Выполнение команд на себя запрещено!</b><!--".rand(100,999)."-->";
- break;
- }
- else
- {
- # Сохраняем список пользователей в массив
- $t=file($path."chat.usr");
- # Пересоздаем файл пользователей и открываем на запись
- $f=fopen($path."chat.usr","r+");
- flock($f,LOCK_EX);
- $f=fopen($path."chat.usr","w+");
- # Перебираем пользователей
- for ($i=0;$i<sizeof($t);$i++)
- {
- $b=explode("\t",$t[$i]);
- $tl=$b[0]; //логин
- if ($tl=='') continue;
- $tp=$b[1]; //пароль
- $ts=$b[2]; //статус
- $tlt=$b[3]; //тайм-штамп
- # Если пользователь не тот, что нам нужен, то переходим к следующему
- if ($tl!=$r)
- {
- fwrite($f,$tl."\t".$tp."\t".$ts."\t".$tlt."\t\n");
- continue;
- }
- # Если назначаем модера, и наш статус 'Админ', то меняем статус логина на 2 ('Модер')
- if (($m[0]=="#moder")&&($st=3))
- {
- $ts=2;
- $xl="";
- $xr="";
- //$l." naznachil(a) ".$r." moderatorom
- $xm="<b>".$l." назначил(а) ".$r." модератором.</b><!--".rand(100,999)."-->";
- }
- # Если назначаем юзера, и наш статус 'Модер' и выше, а статус пользователя меньше нашего, то меняем статус логина на 1 ('Юзер')
- elseif (($m[0]=="#user")&&($st>$ts)&&($st>1))
- {
- $ts=1;
- $xl="";
- $xr="";
- //$l." naznachil(a) ".$r." pol'zovatelem
- $xm="<b>".$l." назначил(а) ".$r." пользователем.</b><!--".rand(100,999)."-->";
- }
- # Если назначаем бан, и наш статус 'Модер' и выше, а статус пользователя меньше нашего, то меняем статус логина на 0 ('Бан')
- elseif (($m[0]=="#ban")&&($st>$ts)&&($st>1))
- {
- $ts=0;
- $xl="";
- $xr="";
- //$l." zablokiroval(a) login ".$r
- $xm="<b>".$l." заблокировал(а) логин ".$r.".</b><!--".rand(100,999)."-->";
- }
- # Если удаляем запись, и наш статус 'Модер' и выше, а статус пользователя меньше нашего, то переходим к следующему пользователю
- elseif (($m[0]=="#del")&&($st>$ts)&&($st>1))
- {
- $xl="";
- $xr="";
- //$l." udalil(a) login ".$r
- $xm="<b>".$l." удалил(а) логин ".$r.".</b><!--".rand(100,999)."-->";
- continue;
- }
- elseif (($st<=$ts)) { $xl=""; $xr=$l; $xm="<b>Недостаточно прав.</b><!--".rand(100,999)."-->"; }//Nedostatochno prav
- if ($tl!='') fwrite($f,$tl."\t".$tp."\t".$ts."\t".$tlt."\t\n");
- }
- flock($f,3); fclose($f);
- }
- break;
- }
- # Если команда не обработана...
- default :
- {
- $xl="";
- $xr=$l;
- $xm="<b>Неверно указана команда.</b><!--".rand(100,999)."-->";
- break;
- }
- }
- }
- }
-
- $f=file($path."chat.msg");
- for ($i=0;$i<10;$i++) {$p=explode("\t",$f[$i]); if ($p[3]==$xm) $xm="";}
- $f=fopen($path."chat.msg","r+");
- flock($f,2);
- $wt=date("H:i")."\t".$xl."\t".$xr."\t".$xm."\t\n".fread($f,8192);
- fseek($f,0);
- if ($xm!="") fwrite($f,substr($wt,0,8192));
- flock($f,3);
- fclose($f);
- $c='read';
- }
-
- if ($c=='read')
- {
- $f=file($path."chat.msg");
- unset($m);
- for ($i=0;$i<sizeof($f);$i++)
- {
- $p=explode("\t",$f[$i]);
- if (($p[1]!=$l)&&($p[2]!=$l)&&($p[2]!="")) continue;
- if ($p[2]=="") $mt=$p[0]." <b><u>".$p[1]."</u>></b> ".$p[3]."<br/>";
- if ($p[2]!="") $mt=$p[0]." <b><u>".$p[1]."".$p[2]."</u>></b> ".$p[3]."<br/>";
- if (strlen($m.$mt)<=1800) $m.=$mt;
- }
- die($wml.$c01.$tm1.$s01.$s02.$s03.$faq.$p01.$m.$a05.$a06.$a09.$a07.$tm.$p99.$c99);
- }
-
- if ($c=='faq')
- die($wml.$c01.$p01.
- '<u>Команды чата:</u><br/>'.
- 'Для пользователей - нет<br/>'.
- 'Для модераторов и админов:<br/>'.
- 'Удаление регистрации - #del login<br/>'.
- 'Запрет на вход (ban) - #ban login<br/>'.
- 'Снятие бана - #user login<br/>'.
- 'Очистка комнаты - #cls.<br/>'.
- 'Для админов:<br/>'.
- #'Назначение администратора - #admin login<br/>'.
- 'Назначение модератора - #moder login<br/>'.
- 'Разжалование до пользователя - #user login<br/>'.
- 'Если пользователь находится в чате, то можно его '.
- 'логин выбирать из списка "кому".<br/>'.
- $a10.$a01.$tm.$p99.$c99);
-
- die($wml.$c01.$p01."Неопознанная ошибка!".$a01.$tm.$p99.$c99);
- ?>
- <u>Команды чата:</u><br/>
- Для пользователей - нет<br/>
- Для модераторов и админов:<br/>
- Удаление регистрации - #del login<br/>
- Запрет на вход (ban) - #ban login<br/>
- Снятие бана - #user login<br/>
- Очистка комнаты - #cls.<br/>
- Для админов:<br/>
- Назначение администратора - #admin login<br/>
- Назначение модератора - #moder login<br/>
- Разжалование до пользователя - #user login<br/>
- Если пользователь находится в чате, то можно его
- логин выбирать из списка "кому".