All pastes #2092920 Raw Edit

Someone

public text v1 · immutable
#2092920 ·published 2011-11-08 04:18 UTC
rendered paste body
<?
   define("NO_USERLOAD",1);
   include("__dima.php");
   if (!defined('DIMA')) exit("??");
   include_once("__other.php");

   checkref();
   mainsecure();

   if (isset($ni)) $ni=substr(trim(@strip_tags($ni)),0,100);
   $uni=ue(@$ni);
   $hni=html(@$ni);

   $formpreg="/^[\x20-\xFF]*$/";

   unset($info);

function stop($msg) {
   global $form, $sessf, $nick;
   include("z-web-part1.php");
   echo "<h3>Ошибка при заполнении формы:</h3><br>
   <font color=red><b>$msg</b></font><br><br><br>";

   echo "<form action=\"login.php\" method=\"post\">$sessf
   <input type=\"hidden name=c\" value=\"reg\">";
   //echo "<input type=hidden name=form[nick] value=\"".htmlspecialchars($form['nick'])."\">";
   foreach ($form as $k=>$v) {
      echo "\n<input type=hidden name=form[$k] value=\"".htmlspecialchars($form[$k])."\">";
   }
   echo "<input type=submit value='Нажмите сюда, чтобы вернуться к форме'></form>";
   echo "<hr size=1 noshade>Не нажимайте кнопку 'НАЗАД' (BACK) в вашем браузере, т.к. ".
      "уже введенные поля погут быть потеряны (из формы).".
      "<br><br><br><br><br><br><br><br><br><br>";

   include("z-web-part2.php");
   exit;
}



if (!isset($c)) $c="";

switch ($c) {


case "":

   include("z-web-part1.php");


   $xmain="";
   if ($s[1])
      $xmain.="<li>Присутствие в чате: активизирован - сейчас вы в чате с ником <font color=blue><b>".html($s['nick'])."</b></font>";
   else {
      $xmain.="<li>Присутствие в чате: сейчас вы не в чате. ";
      if ($s[2] && $s['authnick'])
      $xmain.="<a href=$url[chatgo]?mynick=".ue($s['authnick'])."&mypass=&mysecure=$s[se]&js=1&antihack=$s[antihack_joinchat]$sess>".
              "<b>Немедленно войти в чат &#187;</b></a>";
   }

   $secure=&$GLOBALS['conf']['_secure']['rules'];
   if ($secure[$s['se']]['httppass']) {
      $xmain.="<li>Алгоритм защиты HTTP ключем: ";
      if ($s['pr3cnt']<5) $xmain.="не работает";
      else $xmain.="активен";
   }

   if ($s[2]) {
      $xmain.="<li>Вы авторизованы под ником <font color=blue><b>$s[authnick]</b></font>: для входа в чат не обязательно вводить пароль";
      if ($s[3])
         $xmain.="<li><font color=red><b>Вы являетесь администратором чата с уровенем доступа <b>$s[3]</b></b></font>
          <ul>
          <li><a href='admin.php?$sess'>Администрирование</a> (+$admcmd[admin])
          <li><a href='admin.php?c=chat$sess'>Основные настройки чата</a> (+$admcmd[admin_chat])
          <li><a href='javascript:userlist()'>Кто в чате - доступна функция добавления банов</a> (+$admcmd[addban])
          <li><a href='javascript:banlist()'>Banlist - список банов и их удаление </a> (+$admcmd[banlist]/+$admcmd[delban])
          </ul>";
      else
         $xmain.="<li>Вы не администратор чата";
   }
   else
      $xmain.="<li>Вы не авторизированы";

   $xlogout=antihack("logout");

   $xlogin="";
   if ($s[2]) {
      $xauthnick=ue($s['authnick']);
      $xlogin2=@strval(plugrun('login_links',0,__FILE__,__LINE__));
      $xlogin=xparse(skn("login_main2.html"));
   }

   $xstat="";
   if ($conf['statgo']) {
      needstat();
      $xcreate=date("d.m.Y H:i",@$cstat['create']);
      $xcreate2=floor(doubleval(time()-$cstat['create'])/(24*60*60));
      $xdate=date("d.m.Y H:i",@$cstat['peaktime']);
      $xnum=@$cstat['peak'];
      $xx1=intval(@$cstat['djoin'][$statd1]);
      $xx2=intval(@$cstat['djoin'][$statd]);
      $xx3=intval(@$cstat['dcnt'][$statd1]);
      $xx4=intval(@$cstat['dcnt'][$statd]);
      $xx5=statval(intval(@$cstat['dsize'][$statd1]));
      $xx6=statval(intval(@$cstat['dsize'][$statd]));
      $xx7=statval(intval(@$cstat['size']));
      $xstat=xparse(skn("login_stat.html"));
   }

   echo xparse(skn("login_main.html"));



   include("z-web-part2.php");
   break;


case "joins":

   if (!$conf['statgo']) exit("Ведение статистики отключено");
   needstat();
   if (!count(@$cstat['joins'])) exit("Данных статистики еще нет - никто не входил в чат");

   include("z-web-part1.php");
   $flag=$s[3]>=$admcmd['ip']?1:0;

   echo "<h3>Статистика</h3>".
   backlinks(array('home','login'))."
   <Center>
   <b>Последние входы в чат</b>
   <table border=0 cellspacing=1 cellpadding=2 class=table>
   <tr class=ttr>
   <td class=ttd width=3%>N</td>
   <td class=ttd width=120>Ник</td>
   <td class=ttd>Время</td>
   <td class=ttd>Как давно</td>";
   if ($flag)
      echo "
      <td class=ttd>Хост</td>
      <td class=ttd>Доступ</td>
      <td class=ttd>ID юзера</td>
      <td class=ttd>ID компьютера</td>";
   echo "</tr>";

   $i=1;
   foreach ($cstat['joins'] as $k=>$v) {
      echo "<tr class=btr><td class=btd2".(($flag && !@empty($v[7]))?" rowspan=2":"").">$i</td>".
      "<td class=btd2".(($flag && !@empty($v[7]))?" rowspan=2":"").">".
         ($v[5]?"<a href=$PHP_SELF?c=info&ni=".ue($v[0]).">".html($v[0])."</a></td>":html($v[0])).
      "<td class=btd2>".date("d.m.Y H:i",$v[1])."</td>".
      "<td class=btd2>".duration(time()-$v[1])."</td>";
      if ($flag)
         echo
         "<td class=btd2>".html($v[3])."</td>".
         "<td class=btd2>".($v[2]?$v[2]:'-')."</td>".
         "<td class=btd2>$v[4]</td>".
         "<td class=btd2>".@$v[6]."</td>".
         (!@empty($v[7])?"</tr><tr class=btr><td class=btd colspan=99><Font class=s8>".html(@$v[7])."&nbsp;</font></td>":"");
      echo "</tr>";
      $i++;
   }

   echo "</table></center><P>";

   if ($s[3]>=$admcmd['viewadminban']) {
      echo "<Center>";
      echo "<b>Последние отказы во входе из-за банов</b>";
      if (count($cstat['joinsban'])) {
         echo "<table border=0 cellspacing=1 cellpadding=2 class=table>
         <tr class=ttr>
         <td class=ttd>N</td>
         <td class=ttd width=120>Ник</td>
         <td class=ttd>Время</td>
         <td class=ttd>Как давно</td>";
         if ($s[3]>=$admcmd['ip'])
            echo "
            <td class=ttd>Хост</td>
            <td class=ttd>Доступ</td>
            <td class=ttd>ID юзера</td>
            <td class=ttd>ID компьютера</td>";
         echo "</tr>";

         $i=1;
         foreach ($cstat['joinsban'] as $k=>$v) {
            echo "<tr class=btr><td class=btd2>$i</td>".
            "<td class=btd2><a href=$PHP_SELF?c=info&ni=".ue($v[0]).">".html($v[0])."</a></td>".
            "<td class=btd2>".date("d.m.Y H:i",$v[1])."</td>".
            "<td class=btd2>".duration(time()-$v[1])."</td>";
            if ($s[3]>=$admcmd['ip'])
               echo
               "<td class=btd2>".html($v[3])."</td>".
               "<td class=btd2>".($v[2]?$v[2]:'-')."</td>".
               "<td class=btd2>$v[4]</td>".
               "<td class=btd2>".@$v[5]."</td>";
            echo "</tr>";
            $i++;
         }
         echo "</table><P>";
      }
      else {
         echo "<br>Данных нет (никто не подошел под баны)<P>";
      }
      echo "</center>";

   }

   if ($s[3]>=$admcmd['viewadminban'])
      echo "<small>Поля хост, доступ и un показываются администраторам +$admcmd[ip].
      Таблица 'Последние баны' и эта фраза - администраторам +$admcmd[viewadminban].</small>";

   include("z-web-part2.php");
   break;



case "stats":

   if (!$conf['statgo2'] || !$conf['statgo']) exit("Ведение расширенной статистики отключено");
   needstat();
   if (!count(@$cstat['dcnt'])) exit("Данных статистики еще нет - в чате никто ничего пока не сказал");

   include("z-web-part1.php");

   echo "<h3>Статистика</h3>
   <small>&lt;&lt;&lt; <a href=./?$sess><b>вернуться на главную страницу</b></a> |
   <a href='$PHP_SELF?$sess'><b>на страницу команд</b></a>
   <P>
   </small>
   Сбор статистики с: ".date("d.m.Y H:i:s",$cstat['create'])."<br>
   Всего входов в чат: $cstat[join]<br>
   Максимум людей одновременно: $cstat[peak]<br>
   Всего отослано сообщений: $cstat[cnt], размером ".statval($cstat['size'])."Byte<br>
   Из них приватных: $cstat[cntpriv] (".@sprintf("%.1f",doubleval($cstat['cntpriv'])*100/$cstat['cnt'])."%)<br>
   Всего отключений от чата - kick: $cstat[ban]<br>
   Всего регистраций пользователей: $cstat[reg]
   <P>
   <center>

   <b>Статистика за несколько последних дней и месяцев</b>
   <table border=0 cellspacing=1 cellpadding=2 class=table>
   <tr class=ttr>
   <td class=ttd>N</td>
   <td class=ttd>Дата (день)</td>
   <td class=ttd style='font:8pt Verdana'>&nbsp;&nbsp;Входов&nbsp;&nbsp;</td>
   <td class=ttd style='font:8pt Verdana'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Пик&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
   <td class=ttd style='font:8pt Verdana'>&nbsp;&nbsp;&nbsp;&nbsp;Фраз&nbsp;&nbsp;&nbsp;&nbsp;</td>
   <td class=ttd style='font:8pt Verdana'>Их размер</td>
   <td class=ttd style='font:8pt Verdana'>&nbsp;&nbsp;&nbsp;Банов&nbsp;&nbsp;&nbsp;</td>
   <td class=ttd style='font:8pt Verdana'>Регистраций</td>
   <td class=ttd style='font:8pt Verdana'>Человеко-часов</td>
   </tr>
   ";

   $n=1;
   $keys=array_keys($cstat['dcnt']);
   rsort($keys);

   for ($i=0; $i<count($keys); $i++) {
      $loginthis=$keys[$i];
      $y=sprintf("%02d",floor($loginthis/10000))+2000;
      $m=sprintf("%02d",floor($loginthis/100)%100);
      $d=sprintf("%02d",$loginthis%100);
      echo
      "<tr class=btr>".
      "<td class=btd2>$n</td>".
      "<td class=btd2>$d.$m.$y</td>".
      "<td class=btd2>".@intval($cstat['djoin'][$loginthis])."</td>".
      "<td class=btd2>".@intval($cstat['dpeak'][$loginthis])."</td>".
      "<td class=btd2>".@intval($cstat['dcnt'][$loginthis])."</td>".
      "<td class=btd2>".@intval($cstat['dsize'][$loginthis])."</td>".
      "<td class=btd2>".@intval($cstat['dban'][$loginthis])."</td>".
      "<td class=btd2>".@intval($cstat['dreg'][$loginthis])."</td>".
      "<td class=btd2>".sprintf("%02d час %02d мин",floor(@doubleval(@$cstat['dp5'][$loginthis])/12),((@intval(@$cstat['dp5'][$loginthis])%12)*5))."</td>".
      "</tr>";
      $n++;
   }
   echo "
   <tr class=ttr>
   <td class=ttd>N</td>
   <td class=ttd>Месяц</td>
   <td class=ttd style='font:8pt Verdana'>Входов</td>
   <td class=ttd style='font:8pt Verdana'>Пик</td>
   <td class=ttd style='font:8pt Verdana'>Фраз</td>
   <td class=ttd style='font:8pt Verdana'>Их размер</td>
   <td class=ttd style='font:8pt Verdana'>Банов</td>
   <td class=ttd style='font:8pt Verdana'>Регистраций</td>
   <td class=ttd style='font:8pt Verdana'>Человеко-часов</td>
   </tr>";
   $n=1;
   $keys=array_keys($cstat['mcnt']);
   rsort($keys);
   $months=explode(' ',$rus_months);

   for ($i=0; $i<count($keys); $i++) {
      $loginthis=intval($keys[$i]);
      $y=floor($loginthis/100)+2000;
      $m=$loginthis%100;
      echo
      "<tr class=btr>".
      "<td class=btd2>$n</td>".
      "<td class=btd2>".$months[$m-1]." $y</td>".
      "<td class=btd2>".@intval($cstat['mjoin'][$loginthis])."</td>".
      "<td class=btd2>".@intval($cstat['mpeak'][$loginthis])."</td>".
      "<td class=btd2>".@intval($cstat['mcnt'][$loginthis])."</td>".
      "<td class=btd2>".@intval($cstat['msize'][$loginthis])."</td>".
      "<td class=btd2>".@intval($cstat['mban'][$loginthis])."</td>".
      "<td class=btd2>".@intval($cstat['mreg'][$loginthis])."</td>".
      "<td class=btd2>".sprintf("%02d час %02d мин",floor(@doubleval(@$cstat['mp5'][$loginthis])/12),((@intval(@$cstat['mp5'][$loginthis])%12)*5))."</td>".
      "</tr>";
      $n++;
   }
   echo "</table>";


   include("z-web-part2.php");
   break;



case "login":

   mainsecure();
   if ($s[1]) exit("Нельзя проходить авторизацию, находясь в чате. Сначала выйдите из чата.");
   if ($s[2] || $s[3]) {
      refresh("$PHP_SELF?$sess",2,__FILE__,__LINE__);
      exit("Вы уже авторизированы.<p>
      <li><a href=$PHP_SELF?c=logout&gourl=0&antihack=".antihack("logout")."$sess>СНЯТЬ АВТОРИЗАЦИЮ</a>
      <li><a href=$PHP_SELF?$sess>На страницу команд</a> (автопереход через 3 секунды)");
   }

   include("z-web-part1.php");
   echo "<h3>Авторизация без входа в чат</h3>".
   backlinks(array('home','login'))."<center>";
   if (isset($error)) echo "<font color=red><b>Ник или пароль неверные.<br>Попробуйте еще раз...</b></font>";
   echo "
<form name=enter action=$PHP_SELF>$sessf
<input type=hidden name=c value=slogin><br>
<b>Введите ваш ник: <input type=text size=14 name=nick value=\"".html($s['nick'])."\" class=itext>
пароль: <input type=password size=14 name=pass class=itext>
</b><input type=submit value='Login&#187;' class=ibut></form></center><br>
<font class=s8>Примечание: воспользоваться авторизацией с паролем без входа в чат можно более удобным способом:
<li>введите на главной странице ваш логин и пароль
<li>нажмите Shift+Enter или мышкой кнопку 'Вход в чат', удерживая Shift
<li>вы окажетесь не в чате, а на странице команд/информации 'Команды'
</font><br><br>";
   include("z-web-part2.php");
   break;


case "slogin":

   mainsecure();
   checkref();
   if ($s[1]) exit("нельзя проходить авторизацию, находясь в чате");
   if ($s[2] || $s[3]) {
      refresh("$PHP_SELF?$sess",3,__FILE__,__LINE__);
      exit("Вы уже авторизированы.<p>
      <li><a href=$PHP_SELF?c=logout&gourl=0&antihack=".antihack("logout")."$sess>СНЯТЬ АВТОРИЗАЦИЮ</a>
      <li><a href=$PHP_SELF?$sess>На страницу команд</a> (автопереход через 3 секунды)");
   }

   if (!isset($nick) || !isset($pass)) exit('errL1488');
   $nick=substr(pregtrim($nick),0,100);
   $s['nick']=$nick;

   if (!dbload($nick,$info) || !checkpass($pass,$info['pass'])) {
      refresh("$PHP_SELF?$sess&c=login&error=1",0,__FILE__,__LINE__);
      return;
   }

   $s[2]=1;
   $s['authnick']=sl($nick);
   if (count($info[11])) foreach ($info[11] as $k=>$v) $s[11][$k]=$v;

   // если это админ, заводим флаг авторизованного админа
   conf2admlist();
   if (isset($admlist) && isset($admlist[$s['authnick']])) {
      $s[3]=$admlist[$s['authnick']];
      if ($adminfo[$s['authnick']]['dead']) {
         $s[3]=0;
         putlog2("admin login: $s[nick] ($s[host]), access=$s[3] (blocked)");
      }
      else
         putlog2("admin login: $s[nick] ($s[host]), access=$s[3]");
   }
   else
      $s[3]=0;

   if ($s[3]==0 && (
          @$info[11]['good']==3 ||
          $conf['join']==2 && @$info[11]['good']!=0 && @$info[11]['good']!=1 ||
          $conf['join']==3 && @$info[11]['good']!=1 ||
          $conf['join']==4))
   {
      $s[3]=0;
      $s[2]=0;
      $s['authnick']='';
      include("z-web-part1.php");
      echo backlinks(array('login')).xparse(skn("deny_join.html"));
      include("z-web-part2.php");
      return;
   }

   include("src/secure_reset.php");

   refresh("$PHP_SELF?$sess",0,__FILE__,__LINE__);
   break;



case "logout":

   checkhack("logout",__FILE__,__LINE__);
   if (!empty($export_url_logout)) exit(refresh($export_url_logout,0,__FILE__,__LINE__));
   needuser();
   if ($s[1] && isset($user[$s['nick']])) {
      include_once("src/misc.php");
      loaduser(1);
      quituser($s['nick'],'exit');
      saveuser();
   }
   setcookie($cookie_name,"",1);
   include_once("src/misc.php");
   cleanident();
   cleanident2();

   $s['authnick']="";
   echo "Все ваши временные данные очищены.<P><small>&lt;&lt; <a href=./?$sess>Вернуться</a></small>";

   if (isset($gourl)) switch ($gourl) {
      case "0": refresh("$url[login]?c=login$sess",0,__FILE__,__LINE__); break;
      case "1": refresh("./?$sess",0,__FILE__,__LINE__); break;
   }
   else refresh("$PHP_SELF?$sess",0,__FILE__,__LINE__);
   break;



case "reg":

   if ($conf['newreg']>0) {
      $tmp="Извините, в настоящий момент вы не сможете воспользоваться данной страницей
      и зарегистрировать нового пользователя. Это настройка администратора чата.<P>
      Текущий статус: <i>сейчас регистрация ";
      switch ($conf['newreg']) {
         case 1:
            exit("$tmp запрещена всем");
         case 2:
            if (!$s[2] || !$s['authnick'])
               exit("$tmp разрешена только авторизованным пользователям (вошедшим с логин/паролем)");
            break;
         case 3:
            if (!$s[2] || !$s['authnick'] || $s[3]<100)
               exit("$tmp разрешена только администраторам уровня 100 и выше");
            break;
         case 4:
            if (!$s[2] || !$s['authnick'] || $s[3]<900)
               exit("$tmp разрешена только администраторам уровня 900 и выше");
            break;
         case 5:
            if (!$s[2] || !$s['authnick'] || $s[3]<1000)
               exit("$tmp разрешена только только администраторам уровня 1000");
            break;
      }
   }

   mainsecure();
   if ($s[1]) exit("Нельзя проходить регистрацию, находясь в чате. Выйдите из чата, а потом перейдите к регистрации повторно.");
   if ($GLOBALS['export']) exit(refresh($export_url_reg,0,__FILE__,__LINE__));
   check_config_update();

   plugrun('reg_before',null,__FILE__,__LINE__);

   define("loginform",1);
   include_once("src/login_form.php");

   // если был сабмит
   if (isset($onSubmit)) {
      include_once("src/misc.php");
      if (strlen($form['nick'])) check_reg_nick($form['nick'],$error);
   }

   // сгенерировать форму регистрации
   $buf=loginform_show("src/form_loginform.txt",get_defined_vars());

   // если это первая загрузка или были ошибки - показать форму
   if (!isset($onSubmit) || isset($error)) {
      include("z-web-part1.php");
      echo "<h3>Регистрация нового пользователя</h3>";
      echo "<small><<< <a href='./?$sess'><b>вернуться на главную страницу</b></a>
      | <a href=$PHP_SELF?$sess><b>на страницу команд</b></a><P></small>";
      echo $buf;
      include("z-web-part2.php");
   }
   // если был пост и не было ошибок - зарегистрировать юзера
   else {

      plugrun('reg_after',null,__FILE__,__LINE__);

      $form[11]=array(
         "reg_ip"=>remoteaddr(),
         "reg_time"=>time(),
      );
      if (dbload($form['nick'],$info)) err("errL1485");
      dbsave($form['nick'],$form);

      $s[2]=1;
      $s[3]=0;
      $s['authnick']=$form['nick'];
      echo "<form name=x action='$PHP_SELF' method='post'>$asessf
      <input type=hidden name=c value=\"reg_ok\">
      <input type=hidden name=form[pass] value=\"".html($form['pass'])."\">
      <input type=hidden name=form[nick] value=\"".html($form['nick'])."\">
      </form><script>x.submit()</script>";

      if ($conf['statgo']) {
         loadstat(1);
         @$cstat['reg']++;
         @$cstat['dreg'][$statd]++;
         @$cstat['mreg'][$statm]++;
         savestat();
      }

   }

   break;


case "reg_ok":

   include("z-web-part1.php");
   $xnick=ue($form['nick']);
   $xcrypt_pass=urlencode(encrypt($form['pass'],$cookie_pass));
   $xsecure=$s['se'];
   $xjoinchat=antihack("joinchat");
   echo xparse(skn("login_reg_ok.html"));
   include("z-web-part2.php");
   break;


case "forget":

   mainsecure();
   if ($GLOBALS['export']) exit(refresh($export_url_forget,0,__FILE__,__LINE__));
   include("z-web-part1.php");
   $xadminmail=str_replace("@","&#0064;",$conf['adminmail']);
   $xadminmail=str_replace(".","<HETCnaMy".mt_rand(0,999999).">.",$xadminmail);
   echo xparse(skn("login_forget.html"));
   include("z-web-part2.php");
   break;




case "sforget":

   if ($GLOBALS['export']) exit(refresh($export_url_forget,0,__FILE__,__LINE__));
   mainsecure();

   function forget_exit($stop) {
      global $PHP_SELF, $sess;
      refresh("$PHP_SELF?$sess&c=forget_done",0,__FILE__,__LINE__);
      if ($stop) exit();
   }

   //if (isset($s['mailtime']) && time()-$s['mailtime']<120) forget_exit();
   //$s['mailtime']=time();

   $ni=sl(strip_tags(substr(@trim($ni),0,100)));
   $email=sl(strip_tags(substr(@trim($email),0,500)));

   if (!isset($ni) || pregchecknick($ni)!="ok") forget_exit(1);
   $mail="";
   $info=array();
   if (@dbload($ni,$info)!==true) exit("Пользователя с таким ником не существует.");
   if (isset($info['mail'])) $mail=$info['mail'];
   if ($mail=="") return;
   if ($info['forget']!=1) exit("Пользователь запретил отправку писем с паролями по почте.");
   if (sl($mail)!=$email) forget_exit(1);
   forget_exit(0);

   $html=myfile(skn("login_mail.html"));
   $html=str_replace("[pass]",$info['pass'],$html);
   $html=str_replace("[data]",date("d/m/Y H:i:s"),$html);
   $html=str_replace("[ref]",html(getenv('HTTP_REFERER')),$html);
   $html=str_replace("[www]",'http://'.getenv('HTTP_HOST').getenv('SCRIPT_NAME'),$html);
   $html=str_replace("[ip]",remoteaddr(),$html);
   $html=str_replace("[dns]",mygethostbyaddr(remoteaddr()),$html);
   $html=str_replace("[proxy1]",html(getenv('HTTP_CLIENT_IP')),$html);
   $html=str_replace("[proxy2]",html(getenv('HTTP_X_FORWARDED_FOR')),$html);
   $html=str_replace("[proxy3]",html(getenv('HTTP_VIA')),$html);
   $html=str_replace("[brouser]",user_agent(),$html);

   $smail=new html_mime_mail();
   $smail->add_html($html);
   $smail->build_message('w');
   $smail->send('',$mail,$conf['adminmail'],"Your password from chat.php.spb.ru");

   putlog("mail send to $mail, nick=$ni, ip=".remoteaddr().", ref=".
      getenv('HTTP_REFERER').", browser=".user_agent().
      ", proxy=".getenv('HTTP_VIA'));

   break;


case "forget_done":

   if ($GLOBALS['export']) exit(refresh($export_url_forget,0,__FILE__,__LINE__));
   include("z-web-part1.php");
   echo xparse(skn("login_forget2.html"));
   include("z-web-part2.php");

   break;


case "info":

   mainsecure();
   include("z-web-part1.php");
   echo "<h3>Просмотр информации о зарегистрированных пользователях</h3>";
   echo "<small><<< <a href='./?$sess'><b>вернуться на главную страницу</b></a>
   | <a href=$PHP_SELF?$sess><b>на страницу команд</b></a><P></small>";
   include_once("__other.php");
   if (!isset($ni)) $ni="";
   login_info($ni);
   include("z-web-part2.php");
   break;


case "useredit":

   mainsecure();
   needuser();
   if ($GLOBALS['export']) exit(refresh($export_url_useredit,0,__FILE__,__LINE__));
   if (!$s[2] || $s['authnick']=="") exit("Вы не авторизованы, необходимо <A href=$url[login]?c=login$sess>войти с паролем</a>.");

   define("loginform",1);
   include_once("src/login_form.php");
   $obj=unserialize(myfile("src/form_loginform.txt"));
   conf2admlist();

   $ni=sl(strip_tags(@substr($ni,0,100)));

   if (sl($ni)!=sl($s['authnick']) && $s[3]<$GLOBALS['admcmd']['useredit']) {
      echo "<center><br><br><h1>Access Denied</h1><img src=im/access_denied.jpg><br><br></center>";
      return;
   }
   if (sl($ni)!=sl($s['authnick']) && isset($admlist[$ni]) &&
      $s[3]>=$GLOBALS['admcmd']['useredit'] && $s[3]<=$admlist[$ni] && $s[3]<1000)
   {
      exit("Хоть вы и админ уровня $s[3], но не иметее право редактировать регистрационную
      информацию пользователям с таким же или более высоким доступом.");
   }

   if (sl($s['authnick'])===$ni) $isme=1; else $isme=0;
   if (!$isme) putlog2("login.php/редактирование анкеты юзера $ni (by $s[authnick], $s[3], $s[host], $s[0])");

   if (!dbload($ni,$info)) {
      echo "<br><br><br>пользователь <font color=blue><b>$ni</b></font> не найден<br><br><br>";
      return;
   }


   include("z-web-part1.php");

   unset($obj['nick']);
   unset($obj['pass']);
   unset($obj['pass2']);
   if (!isset($onSubmit)) $form=$info;
   $newantihack=getantihack();
   $form_html="
   <input type=hidden name=c value=\"useredit\">
   <input type=hidden name=ni value=\"".html($ni)."\">
   <input type=hidden name=antihack value=\"$newantihack\">";
   $buf=loginform_show($obj,get_defined_vars());

   if (!isset($onSubmit) || isset($error)) {
      $s["antihack_L1"]=$newantihack;
      echo "<h3>Изменение регистрационных данных пользователя <font color=blue><b>$info[nick]</b></font></h3>
      <small>&lt;&lt;&lt; <b><a href=./?$sess>вернуться на главную страницу</a></b>
      | <a href=$PHP_SELF?$sess><b>на страницу команд</b></a>
      | <b><a href=$PHP_SELF?c=info&ni=".ue($ni)."$sess>искать другого пользователя</a></b>
      </small><P>";
      echo $buf;
      echo adminlinks($ni);
   }
   else {
      if ($s["antihack_L1"]!=$antihack) exit("<a href=help.php?help=5>errL442: HackDetect: $antihack</a>");
      $form['nick']=$info['nick'];
      $form['pass']=$info['pass'];
      $form[11]=$info[11];
      dbsave($ni,$form);
      refresh("$url[login]?c=info&ni=".ue($ni)."$sess",3,__FILE__,__LINE__);
      echo "
      <h3>Запись изменена!</h3><br><br>
      <li><a href=$url[login]?c=useredit&ni=".ue($ni)."$sess>Повторное редактирование пользователя</a><br><br>
      <li><a href=$url[login]?c=info&ni=".ue($ni)."$sess>Информация о пользователе</a>
      (через 3 секунды авто переход)<br><br>
      <li><a href=./?$sess>На главную страницу</a><br><br>
      <br><br>";
      $ni=finduser($ni);
      if ($ni!==false && isset($user[$ni])) {
         loaduser(1);
         $user[$ni]['sex']=intval($form['sex']);
         saveuser();
         $s['sex']=intval($form['sex']);
      }
   }

   include("z-web-part2.php");
   break;


case "userpass":

   mainsecure();
   needuser();
   if ($GLOBALS['export']) exit(refresh($export_url_userpass,0,__FILE__,__LINE__));
   include("z-web-part1.php");
   $ni=strip_tags(trim(@substr($ni,0,100)));
   if (sl($ni)==sl($admfirst) && $s['authnick']!==sl($admfirst)) exit("Сменить пароль владельцу чата нельзя. Только он сам может изменить свой пароль.<P>");
   $xnick=html($ni);
   $enick=ue($ni);
   $xantihack=antihackform("L2");
   echo xparse(skn("login_userpass.html"));
   if (sl($ni)!=sl($s['authnick']) && $s[3]>=$GLOBALS['admcmd']['usernewpass']) {
      echo "<P>В данный момент вы пытатесь сменить пароль другому пользовалю.
      Поэтому в поле СТАРЫЙ ПАРОЛЬ ничего не пишите.";
   }
   echo adminlinks($ni);
   include("z-web-part2.php");

   break;


case "userpass_post":

   mainsecure();
   needuser();
   if ($GLOBALS['export']) exit(refresh($export_url_userpass,0,__FILE__,__LINE__));
   if (!$s[2] || $s['authnick']=="") exit("Вы не авторизованы, необходимо <A href=$url[login]?c=login$sess>войти с паролем</a>.");
   if ($s["antihack_L2"]!=$antihack) exit("<a href=help.php?help=5>errL442: HackDetect</a>");
   if (sl($ni)==sl($admfirst) && $s['authnick']!==sl($admfirst)) exit("errL1459");

   $ni_=strip_tags(@substr($ni,0,100));
   $ni=sl($ni_);
   conf2admlist();

   if (sl($ni)!=sl($s['authnick']) && $s[3]<$GLOBALS['admcmd']['usernewpass']) {
      exit("<center><br><br><h1>Access Denied</h1><img src=im/access_denied.jpg><br><br></center>");
   }
   if (sl($ni)!=sl($s['authnick']) && isset($admlist[$ni]) &&
      $s[3]>=$GLOBALS['admcmd']['usernewpass'] && $s[3]<=$admlist[$ni] && $s[3]<1000)
   {
      exit("Хоть вы и админ уровня $s[3], но не иметее право менять пароль пользователям с
      таким же или более высоким доступом.");
   }

   if (sl($s['authnick'])===$ni) $isme=1; else $isme=0;
   if (!$isme) putlog2("login.php/смена пароля юзеру $ni (by $s[authnick], $s[3], $s[host], $s[0])");

   if (!dbload($ni,$info)) {
      exit("Пользователь [$ni] не найден");
   }

   if (sl($pass2)!==sl($pass3)) {
      alert("Новые пароли не совпадают. Придумайте и два раза введите новый пароль в два поля.");
      refresh("$url[login]?c=userpass&ni=".ue($ni)."$sess",0,__FILE__,__LINE__);
      return;
   }
   if ($s[3]<$GLOBALS['admcmd']['usernewpass'] || sl($ni)==sl($admfirst)) {
      if (sl($pass1)!==sl($info['pass'])) {
         alert("Старый пароль введен не верно.");
         refresh("$url[login]?c=userpass&ni=".ue($ni)."$sess",0,__FILE__,__LINE__);
         return;
      }
   }
   if (strlen($pass2)<3 || strlen($pass2)>100) {
      alert("Новый пароль должен быть от 3 до 100 символов длины.");
      refresh("$url[login]?c=userpass&ni=".ue($ni)."$sess",0,__FILE__,__LINE__);
      return;
   }

   $info['pass']=sl($pass2);
   dbsave($ni,$info);
   refresh("$url[login]?c=info&ni=".ue($ni_)."$sess",0,__FILE__,__LINE__);
   break;


case "userdelete":

   mainsecure();
   needuser();
   if ($GLOBALS['export']) exit(refresh($export_url_userdelete,0,__FILE__,__LINE__));
   include("z-web-part1.php");
   $ni=strip_tags(@substr($ni,0,100));
   if (sl($ni)==sl($admfirst)) exit("Удалять владельца чата нельзя<P>");
   echo "
   <h3>Удаление пользователя</h3>
   <small>&lt;&lt;&lt; <b><a href=./?$sess>вернуться на главную страницу</a></b>
   | <b><a href=$PHP_SELF?c=info&ni=".ue($ni)."$sess>искать другого пользователя</a></b>
   </small><P>
   <br><br><br>
   <center><font color=red><b>Действительно удалить: $ni?</b></font>
   <form action=\"$url[login]\" method=\"post\">$sessf
   <input type=hidden name=antihack value=\"".antihack("L3")."\">
   <input type=hidden name=c value=\"userdelete_post\">
   <input type=hidden name=ni value=\"".html($ni)."\">
   <input type=submit value='Удалить'>
   </form>
   <a href=./?$sess>Отменить удаление</a>
   </center><br><br><br>";
   include("z-web-part2.php");
   break;


case "userdelete_post":

   mainsecure();
   needuser();
   if ($GLOBALS['export']) exit(refresh($export_url_userdelete,0,__FILE__,__LINE__));
   if (!$s[2] || $s['authnick']=="") exit("Вы не авторизованы, необходимо <A href=$url[login]?c=login$sess>войти с паролем</a>.");
   if ($s["antihack_L3"]!=$antihack) exit("<a href=help.php?help=5>errL442: HackDetect</a>");

   $ni=sl(strip_tags(@substr($ni,0,100)));
   conf2admlist();

   if ($ni==sl($admfirst)) exit("Удалять владельца чата нельзя");
   if (sl($ni)!=sl($s['authnick']) && $s[3]<$GLOBALS['admcmd']['userdelete']) {
      exit("<center><br><br><h1>Access Denied</h1><img src=im/access_denied.jpg><br><br></center>");
   }
   if (sl($ni)!=sl($s['authnick']) && isset($admlist[$ni]) &&
      $s[3]>=$GLOBALS['admcmd']['userdelete'] && $s[3]<=$admlist[$ni] && $s[3]<1000)
   {
      exit("Хоть вы и админ уровня $s[3], но не иметее право удалять пользователей с
      таким же или более высоким доступом.");
   }

   if (sl($s['authnick'])===$ni) $isme=1; else $isme=0;
   if (!$isme) putlog2("login.php/удаление юзера $ni (by ".mysmask().")");

   if (!dbload($ni,$info)) {
      exit("Пользователь [$ni] не найден");
   }
   dbremove($ni);

   if (sl($ni)==sl($s['authnick'])) {
      if (isset($user[$s['nick']])) {
         include_once("src/misc.php");
         loaduser(1);
         quituser($s['nick'],"User removed by himself (from users database!)");
         saveuser();
      }
      session_destroy();
   }
   else {
      foreach ($user as $k=>$v) {
         if (sl($k)==$ni) {
            include_once("src/misc.php");
            loaduser(1);
            quituser($k,"User removed by $s[nick] (from users database!)");
            saveuser();
            break;
         }
      }
   }

   refresh("$url[login]?c=info&ni=".ue($ni)."$sess",0,__FILE__,__LINE__);

   break;


case "setup":

   mainsecure();
   needuser();

   if (!isset($ni) || !is_string($ni)) exit("errL828");

   if ($s[2]!=1 || $s['authnick']=="") {
      include(skn("__skin1.php"));
      echo frame1()."Персональные настройки чата".frame2().
      "Вы не авторизованы. Настройки чата
      доступны только зарегистрированным пользователям.
      Настройки дают возможность изменить много полезных опций
      и сделать пребываение в чате более комфортным.
      Настройки сохраняются на сервере и будут доступны вам с любого
      компьютера, где вы подключетесь и войдете в чат.<P>
      Чтобы попасть на страницу настроек:<P>
      <li>нажмите &lt;ВЫХОД&gt; (внизу справа) и покиньте чат
      <li>на главной странице чата выберите &lt;РЕГИСТРАЦИЯ&gt; и зарегистрируйтесь
      <li>войдите в чат, введя ваш ник и пароль".frame3();
      exit;
   }


   $jsclose=@intval($jsclose);
   $ni=strip_tags(@substr($ni,0,100));
   $ni_=$ni;
   $ni=sl($ni);
   conf2admlist();

   if (sl($s['authnick'])===$ni) $isme=1; else $isme=0;

   if (!$isme && $s[3]<$GLOBALS['admcmd']['useredit']) {
      echo "<center><br><br><h1>Access Denied</h1><img src=im/access_denied.jpg><br><br></center>";
      return;
   }
   if (!$isme && isset($admlist[$ni]) &&
      $s[3]>=$GLOBALS['admcmd']['useredit'] && $s[3]<=$admlist[$ni] && $s[3]<1000)
   {
      exit("Хоть вы и админ уровня $s[3], но не иметее право редактировать личные настройки
      пользователям с таким же или более высоким доступом.");
   }

   if (!$isme) putlog2("login.php/настройки юзера $ni (by $s[authnick], $s[3], $s[host], $s[0])");

   if (!dbload($ni,$info)) {
      echo "<br><br><br>пользователь <font color=blue><b>$ni_</b></font> не найден<br><br><br>";
      return;
   }

   include_once(skn("__skin1.php"));


   // шрифт ника
   $lf_font_key=array();
   $lf_font_var=array();
   foreach ($listmain_f as $k=>$v) {
      $lf_font_key[]=$k;
      $lf_font_var[]="<OPTIONHTML>style='font: 10pt $v'</OPTIONHTML>$v";
   }

   // размер ника
   $lf_ns_key=array();
   $lf_ns_var=array();
   for ($i=$listnick_s1; $i<=$listnick_s2; $i++) {
      $lf_ns_key[]=$i;
      $lf_ns_var[]="{$i}pt";
   }

   // цвет ника
   $lf_nct_key=array();
   $lf_nct_var=array();
   foreach ($listnick_ct as $k=>$v) {
      $lf_nct_key[]=$k;
      $lf_nct_var[]="<OPTIONHTML>style='background:$v'</OPTIONHTML>";
   }

   // цвет фона ника
   $lf_ncf_key=array();
   $lf_ncf_var=array();
   foreach ($listnick_cf as $k=>$v) {
      $lf_ncf_key[]=$k;
      $lf_ncf_var[]="<OPTIONHTML>style='background:$v'</OPTIONHTML>";
   }

   // размер сообщений
   $lf_ts_key=array();
   $lf_ts_var=array();
   for ($i=$listtext_s1; $i<=$listtext_s2; $i++) {
      $lf_ts_key[]=$i;
      $lf_ts_var[]="{$i}pt";
   }

   // цвет сообщений
   $lf_tct_key=array();
   $lf_tct_var=array();
   foreach ($listtext_ct as $k=>$v) {
      $lf_tct_key[]=$k;
      $lf_tct_var[]="<OPTIONHTML>style='background:$v'</OPTIONHTML>";
   }

   // цвет фона сообщений
   $lf_tcf_key=array();
   $lf_tcf_var=array();
   foreach ($listtext_cf as $k=>$v) {
      $lf_tcf_key[]=$k;
      $lf_tcf_var[]="<OPTIONHTML>style='background:$v'</OPTIONHTML>";
   }

   // названия скинов
   $lf_skins_k=array();
   $lf_skins_v=array();
   foreach ($skinlist as $k=>$v) {
      if ($s[3]>=$v[0]) {
         $lf_skins_k[]=$k;
         $lf_skins_v[]=$v[1];
      }
   }

   $xnick=html($ni_);


   // загрузка анкеты юзера
   load_s_file(0,"obj","src/form_setup.txt","buf2");


   // удаление запрещенных для редактирования полей
   foreach ($nickcss_vars as $k=>$v) {
      if ($s[3]<$admcmd[$v]) unset($obj[$v]);
   }
   if ($s[3]<$admcmd['my_status']) unset($obj['my_status']);
   if ($s[3]<$admcmd['usersetup']) unset($obj['good']);

   $finduser=finduser($ni);
   if ($finduser!==false) $inchat=1; else $inchat=0;

   // сохранение старых значений полей для определения, не изменились ли они
   $old_status="";
   if ($finduser!==false && !empty($user[$finduser]['my_status'])) $old_status=$user[$finduser]['my_status'];
   $is_status=0;
   $old_tct=$s[11]['tct'];
   $is_tct=0;
   $old_skin=$s['skin'];
   $is_skin=0;

   // загрузка библиотеки phpLoginForm
   define("LF_BLUR",1);
   define("loginform",1);
   include_once("src/login_form.php");
   $LOAD=array();

   // если не было сабмита
   if (!isset($onSubmit)) {
      $LOAD=$info[11];
   }

   // основная обработка формы
   $buf=loginform_show($obj,get_defined_vars(),$LOAD);


   if (!isset($onSubmit) || isset($error)) {

      $frame1=frame1();
      $frame2=frame2();
      $frame3=frame3();
      $xauthnick=ue($s['authnick']);
      $xhelp=morehelp('',xparse(skn("login_setup_help.html")));

      if ($jsclose) {
         $xlinks=adminlinks($ni,"_blank");
         echo xparse(skn("login_setup.html"),"",get_defined_vars());
      }
      else {
         include("z-web-part1.php");
         echo "<h3>Персональные настройка чата пользователя
         <font color=blue><b>".html($info['nick'])."</b></font></h3>
         <small>&lt;&lt;&lt; <b><a href=./?$sess>вернуться на главную страницу</a></b>
         | <b><a href=$PHP_SELF?$sess>на страницу команд</a></b><P></small>
         <center>
         <table width=80% border=0 cellspacing=0 cellpadding=0><tr><td>";
         echo $buf;
         echo "</td></tr></table>";
         echo adminlinks($ni);
         include("z-web-part2.php");
      }

   }
   else {

      if (isset($form['my_status'])) strip_tags($form['my_status']);
      if (isset($form['my_infomsg'])) strip_tags($form['my_infomsg']);
      //$form['my_status']=@trim($form['my_status']);
      //$form['mymsg_blink']=intval($form['mymsg_blink']);
      //$form['msgforme_blink']=intval($form['msgforme_blink']);
      foreach ($form as $k=>$v) $info[11][$k]=$v;
      //dbsave($ni,$info);

      include_once("__other.php");
      statusload();
      userload(1);

      $head_refresh=0;
      $total_refresh=0;

      //
      // Персональный статус
      //
      if (isset($obj['my_status']) && $old_status!=$form['my_status']) {
         if ($inchat) {
            $user[$finduser]['my_status']=$form['my_status'];
            if (empty($form['my_status'])) cmsg_status($finduser,$confstatus[0]);
            else cmsg_status($finduser,$form['my_status']);
            write_www_sess($finduser);
         }
         if ($isme) $s['my_status']=$form['my_status'];
      }

      //
      // Цвет текстовых сообщений
      //
      if ($isme) {
         if ($old_tct!=$form['tct']) $head_refresh=1;
         foreach ($info[11] as $k=>$v) $s[11][$k]=$v;
         $x=explode("|",$s['nickcss']);
         foreach ($nickcss_vars as $k=>$v) {
            $x[$k]=@strval($form[$v]);
            if ($s[3]<$admcmd[$v] || $x[$k]==-1) $x[$k]="";
         }
         $s['nickcss']=implode("|",$x);
         if ($inchat) $user[$finduser]['nickcss']=$s['nickcss'];
      }
      else {
         $x=array();
         foreach ($nickcss_vars as $k=>$v) {
            $tmp=@strval($info[11][$v]);
            if ($tmp==-1) {
               $tmp="";
               unset($info[11][$v]);
            }
            $x[]=$tmp;
         }
         $x=implode("|",$x);
         if ($inchat) $user[$finduser]['nickcss']=$x;
      }


      //
      // Скин
      //
      if (strpos($form['skin'],"/")===true || strpos($form['skin'],".")===true) exit("errL803: hackdetect");
      if ($old_skin!=$form['skin']) {
         if ($inchat) {
            $user[$finduser]['skin']=$form['skin'];
            if ($isme) {
               $s['skin']=$form['skin'];
               if ($jsclose) $total_refresh=1;
            }
         }
      }

      dbsave($ni,$info);
      usersave();

      //
      // Синхронизация с JS переменными:
      //
      if ($isme && $inchat && !empty($jsclose)) {
         echo "<script>";
         echo "opener.mymsg_blink=$form[mymsg_blink];\n";
         echo "opener.msgforme_blink=$form[msgforme_blink];\n";
         echo "opener.my_timeshow=$form[my_timeshow];\n";
         if (@intval($s[11]['events'])>1 || !$conf['eventsgo'])
            echo "opener.eventsgo=0; opener.startevent=0; ".
                 "opener.frames.more.document.more_form.stopevent.checked=false\n";
                 //"try{parent.frames.more.document.more_form.stopevent.checked=false;}catch(_err){}\n";
         else
            echo "opener.eventsgo=1; opener.startevent=1; ".
                 "opener.frames.more.document.more_form.stopevent.checked=true\n";
                 //"try{parent.frames.more.document.more_form.stopevent.checked=true;}catch(_err){}\n";
         if (isset($obj['my_status']) && $old_status!=$form['my_status'])
            echo "try{opener.frames.more.location.reload()}catch(_E){}\n";
         echo "</script>";
      }

      if ($head_refresh && !empty($jsclose))
         echo "<script>opener.frames.head.location=opener.frames.head.location;</script>";

      if ($total_refresh && !empty($jsclose)) {
         echo "<script>opener.location.href=opener.location.href;</script>";
      }

      if (isset($ButtonType) && $ButtonType) {
         refresh("$PHP_SELF?c=setup&ni=".html($ni_)."&jsclose=".@intval($jsclose).$sess,0,__FILE__,__LINE__);
      }
      else {
         if (!empty($jsclose)) {
            echo "<script>opener.set_focus(); window.close();</script>";
         }
         else {
            refresh("$url[login]?c=info&ni=".html($ni_)."$sess",0,__FILE__,__LINE__);
         }
      }
   }

   break;



case "event":

   if (!$conf['eventsgo']) exit("Извините, функция отключена");
   if (!$s[2]) exit("Извините, данная страница доступна только <a href=$PHP_SELF?c=reg$sess>зарегистрированным</a> пользователям");
   if (empty($ni)) $ni=$s['authnick'];
   if (!@check_operation($ni,false,false,false,"usersetup","звуки-сигналы-спецэффекты",$info,$isme))
      exit("errL1169");
   mainsecure();

   $ni=strip_tags(@substr($ni,0,100));
   include("z-web-part1.php");
   include_once("src/cnfvar.php");

   echo "<h3>Настройка звуков, сигналов и спецэффектов на разные события чата для <font color=blue><b>$info[nick]</b></font>
   (<a href=help.php?help=9$sess>справка</a>)</h3>";
   echo "<small><<< <a href='./?$sess'><b>вернуться на главную страницу</b></a>
      | <a href=$PHP_SELF?$sess><b>на страницу команд</b></a><P></small>";

   $soundpath=dellastslash($soundpath);

   $tmp=array_keys($eventsinf);
   $etype=html(@substr($etype,0,16));
   if (empty($etype)) $etype=$tmp[0];
   if (!isset($eventsinf[$etype])) exit("errL1228: HackDetect");

   if (@strlen($info[11]["e_{$etype}_snd"])==0) $loginthis="";
   elseif (isset($info[11]["e_{$etype}_snd"])) $loginthis=$info[11]["e_{$etype}_snd"];
   if (!isset($info[11]["e_{$etype}_snd"])) $loginthisdef=$conf['_event']['main'][$etype.'u'][$eventsprm['snd'][0]];

   if (!is_dir($soundpath)) exit("Не найден каталог <b>$soundpath</b>");

   $dir=opendir("$soundpath") or exit("Ошибка открытия $soundpath");
   $files=array();
   while (($fn=readdir($dir))!==false) {
      if (!preg_match("~(.+)\.($soundext)$~is",$fn,$ok)) continue;
      $files[$fn]=array(filesize("$soundpath/$fn"), filemtime("$soundpath/$fn"), $ok[1]);
   }

   if (count($files)==0) {
      echo "<br><br><br>В каталоге $soundpath не найдены звуковые файлы<br><br><br>";
      include("z-web-part2.php");
      return;
   }

   ksort($files);

   echo "<form action=\"$PHP_SELF\" method=\"post\" name='enter'>
   <input type=hidden name=c value=\"event_post\">
   <input type=hidden name=antihack value=\"".antihack("L5")."\">
   <input type=hidden name=ni value=\"".html($ni)."\">
   <b>Выберите тип события:</b>
   <select name=etype size=1 class=isel
   onChange=\"location.href='$PHP_SELF?c=event&ni=".ue($ni)."&jsclose=0&etype='+document.enter.etype.options[document.enter.etype.selectedIndex].value+'{$sess}'\">";
   foreach ($eventsinf as $k=>$v) {
      echo "<option value='$k'".($etype==$k?" selected":"").">$v[0]</option>";
   }
   echo "</select><P>
   Описание текущего выбранного события:
   <ul>
   <i><u>{$eventsinf[$etype][1]}</u></i>
   </ul>
   <P>

   <center><b>Выберите необходимые спецэффексты при наступлении данного события.</b> ".
   morehelp("","
   Слова 'Вкл/Откл', написанные наклонным шрифтом, являются значениями по-умолчанию
   (если вы их никак не выбирали), а жирным - выбранные вами значения для себя.
   По-умолчанию любое значение можеть быть либо включенным, либо отключенным.
   Ваш выбор перекроет это значение.
   Если вы пользуетесь функцией 'История важных сообщений', обязательно включите
   их запись, которая по-умолчанию может быть выключена.",0)."</center>

   <table width=100% border=0 cellspacing=1 cellpadding=3 class=table>
   <tr class=ttr>
   <td style='writing-mode:tb-rl;font:9pt Verdana' class=ttd nowrap>По-умолчанию</td>
   <td style='writing-mode:tb-rl;font:9pt Verdana' class=ttd>ТЕКУЩЕЕ<BR>ЗНАЧЕНИЕ</td>
   <td style='writing-mode:tb-rl;font:9pt Verdana' class=ttd>ОТКЛЮЧИТЬ</td>
   <td style='writing-mode:tb-rl;font:9pt Verdana' class=ttd>ВКЛЮЧИТЬ</td>
   <td class=ttd width=90%>Список возможных реакций для выбранного в списке выше события</td>
   </tr>";
   $defval=$conf['_event']['main'][$etype.'u'];
   foreach ($eventsprm as $k=>$v) {
      if (!$v[1]) continue;
      if (!empty($defval[$eventsprm[$k][0]])) $xinfo="<i><u>вкл</u></i>"; else $xinfo="<i>откл</i>";
      if (isset($info[11]["e_{$etype}_$k"]))
         if (!empty($info[11]["e_{$etype}_$k"])) $xinfo="<b><u>вкл</u></b>"; else $xinfo="<b>откл</b>";
      echo "<tr class=btr>
      <td class=btd2><input type=radio name=form_$k ".(!isset($info[11]["e_{$etype}_$k"])?"checked":"")." value=''></td>
      <td class=btd2>$xinfo</td>
      <td class=btd2><input type=radio name=form_$k ".(isset($info[11]["e_{$etype}_$k"]) && $info[11]["e_{$etype}_$k"]==0?"checked":"")." value='0'></td>
      <td class=btd2><input type=radio name=form_$k ".(isset($info[11]["e_{$etype}_$k"]) && $info[11]["e_{$etype}_$k"]==1?"checked":"")." value='1'></td>
      <td>$v[3]</td></tr>";
   }

   if (strlen($loginthis)==0) {
      if (empty($defval[$eventsprm['snd'][0]])) $xinfo="<i>по-умолчанию - звук отключен</i>";
      else $xinfo="<i>по-умолчанию - звук включен: $thisdef ".
           "(<a href='#' onclick=\"go('$thisdef');return false;\">прослушать</a>)</i>";
   }
   else {
      if ($loginthis==="0") $xinfo="<b>звук отключен</b>";
      else $xinfo="<b>звук включен (<a href='#' onclick=\"go('$loginthis');return false;\">прослушать</a>)</b>";
   }
   echo "</table>";

   echo "<P><center>
   <b>Воспроизводить звуковой сигнал из *.WAV, *.MID и других файлов:</b>
   <table border=0 cellspacing=1 cellpadding=2 class=table width=70%>
   <tr class=ttr>
   <td class=ttd>Выбор</td>
   <td class=ttd>Файл</td>
   <td class=ttd>Размер</td>
   <td class=ttd>Описание</td>
   <td class=ttd>Модификация</td>
   <td class=ttd>Команды</td>
   </tr>
   <tr class=btr>
   <td class=btd2 colspan=10>Текущее значение: $xinfo</td>
   </tr>
   <tr class=btr>
   <td class=btd2><input type=radio name=sound value=\"\" ".($loginthis===""?"checked":"")."></td>
   <td class=btd colspan=10>По-умолчанию</small></td>
   </tr>
   <tr class=btr>
   <td class=btd2><input type=radio name=sound value=\"0\" ".($loginthis==="0"?"checked":"")."></td>
   <td class=btd colspan=10>Отключить этот звук</td>
   </tr>";

   if (substr($loginthis,2)!="./" && $loginthis!=="0" && !empty($loginthis))
      echo "
      <tr class=btr>
      <td class=btd2><input type=radio name=sound value=\"my\" checked></td>
      <td class=btd colspan=4>Ввести произвольный URL:
      <input type=text size=35 name=sndurl class=itext value='$loginthis'><br>
      <span class=s8>Используйте звуки только со своего сайта! Не вписывайте
      сюда ничего, если это вам кто-то посоветует в чате! Это
      может быть очень опасно (см. справку).</span></td>
      <td><a href='#' onclick=\"go('$loginthis');return false;\">прослушать</a><br>
      <a href=help.php?help=9$sess>справка</a></td>
      </tr>";
   else
      echo "
      <tr class=btr>
      <td class=btd2><input type=radio name=sound value=\"my\"></td>
      <td class=btd colspan=4>Ввести произвольный URL:
      <input type=text size=35 name=sndurl class=itext><br>
      <span class=s8>
      Используйте звуки только со своего сайта! Не вписывайте
      сюда ничего, если это вам кто-то посоветует в чате, это
      может быть опасно (см. справку).</span></td>
      <td><a href=help.php?help=9$sess>справка</a></td>
      </tr>";

   foreach ($files as $k=>$v) {
      $desc="описания нет";
      if (file_exists("$soundpath/$v[2].txt")) $desc=myfile("$soundpath/$v[2].txt");
      echo "
      <tr class=btr>
      <td class=btd2><input type=radio name=sound value=\"".html("$soundpath/$k")."\" ";
      if ($loginthis=="$soundpath/$k") echo " checked ";
      echo "></td>
      <td class=btd>$k</td>
      <td class=btd align=right>".statval($v[0])."</td>
      <td class=btd>$desc</td>
      <td class=btd2>".date("d.m.Y",$v[1])."</td>
      <td class=btd2><a href='#' onclick=\"go('$soundpath/$k');return false;\">прослушать</a></td>
      </tr>";
   }

   echo "</table>
   <script>
   function go(name) {
      snd.src=name;
   }
   </script>
   <bgsound src='' loop=1 id=snd>";


   $kk="vol";
   $xval="";
   if (@strlen($info[11]["e_{$etype}_{$kk}"])==0) {
      $xinfo=intval($defval[$eventsprm[$kk][0]])."% (по-умолчанию)";
   }
   else {
      $xval=intval($info[11]["e_{$etype}_{$kk}"]);
      $xinfo="<b>$xval%</b>";
   }
   echo "Громкость звука от 0 до 100:
   <input type=text name=form_{$kk} value=\"$xval\" size=3 class=itext>%.
   Текущее значение: $xinfo.<br>";


   $kk="loop";
   $xval="";
   if (@strlen($info[11]["e_{$etype}_{$kk}"])==0) {
      $xinfo=intval($defval[$eventsprm[$kk][0]])." (по-умолчанию)";
   }
   else {
      $xval=intval($info[11]["e_{$etype}_{$kk}"]);
      $xinfo="<b>$xval</b>";
   }
   echo "Сколько раз подряд играть звук:
   <input type=text name=form_{$kk} value=\"$xval\" size=3 class=itext> раз.
   Текущее значение: $xinfo.</center><P>";


   if (@strlen($info[11]["e_{$etype}_time"])==0) {
      $xval=intval($defval[$eventsprm['time'][0]]);
      if (!$xval) $xinfo="<i>по-умолчанию - запускать спецэффекты каждый раз (постоянно)</i>";
      else $xinfo="<i>по-умолчанию - запуск не чаще одного раза за $xval сек.</i>";
      $xval="";
   }
   else {
      $xval=intval($info[11]["e_{$etype}_time"]);
      if (!$xval) $xinfo="<b>запускать спецэффекты каждый раз (постоянно)</b>";
      else $xinfo="<b>запуск не чаще одного раза за $xval сек.</b>";
   }
   echo "<b><center>Защита от надоедливости.</center></b>
   Воспроизводить спецэффекты не чаще одного раза в
   <input type=text name=form_time value=\"$xval\"
   size=10 class=itext> сек.<br>
   Текущее значение: $xinfo. ".
   morehelp("","
   Введите число в секундах, означающих паузу. Введите 0 для постоянных запусков спецэффектов.
   Очистите это поле, чтобы использовать настройку времени по-умолчанию.
   В течении указанного кол-ва секунд чат будет игнорировть
   повторно сработавшее событие, чтобы не слишком часто вас отвлекать.
   В не зависимости от этого, сообщения таки будут сохраняться в истории,
   если включена опция 'записывать важные сообщения'.",0).
   "<P><center>
   <input class=ibut type=submit value='Сохранить настройки для текущего события'>
   <br>
   После сохранения нажмите клавишу F5 в чате, для обновления всей страницы!
   </center>
   </form>
   Данная страница призвана помочь вам <b>вовремя</b> обратить
   внимание на чат, если там происходит что-то интересное.
   Довольно часто бывает ситуация, когда вы работаете в
   других окнах и не видите, что в чате кто-то вас разыскивает.
   Для сигнализации используются все возможные методы - звуки,
   мигания, новые окна и т.д. Для каждого типа события
   вы можете выбрать методы оповещения, которые сочтете нужными.
   При измении параметров необходимо перегружать окно чата.
   На эту страницу можно быстро попасть из чата,
   удерживая Shift и кликнув калочку 'Спецэффекты'.
   <P><hr size=1 noshade>";

   echo adminlinks($ni);

   //pr($info);
   include("z-web-part2.php");
   break;


case "event_post":

   if (!$conf['eventsgo']) exit("Извините, функция отключена");
   mainsecure();
   if (!check_operation($ni,1,"L5",false,"usersetup","смена звукового файла",$info,$isme)) exit("errL1167");
   include_once("src/cnfvar.php");
   $etype=html(@substr($etype,0,16));
   if (!isset($eventsinf[$etype])) exit("err1230: HackDetect");
   if ($sound=="my") $sound=$sndurl;

   $sound=substr(preg_replace("![^a-z0-9/:.?%~ _-]!i","",str_replace("\\","/",@trim($sound))),0,500);
   if (strlen($sound)==0)
      unset($s[11]["e_{$etype}_snd"],$info[11]["e_{$etype}_snd"]);
   else
      $s[11]["e_{$etype}_snd"]=$info[11]["e_{$etype}_snd"]=$sound;

   foreach ($eventsprm as $k=>$v) {
      if ($v[2]!=2) continue;
      $v=@trim($GLOBALS["form_$k"]);
      if (strlen($v)==0)
         unset($s[11]["e_{$etype}_$k"],$info[11]["e_{$etype}_$k"]);
      else
         switch ($k) {
            case "vol":
               $s[11]["e_{$etype}_$k"]=$info[11]["e_{$etype}_$k"]=max(min(abs(intval($v)),100),1);
               break;
            default:
               $s[11]["e_{$etype}_$k"]=$info[11]["e_{$etype}_$k"]=min(abs(intval($v)),999999);
         }
   }

   foreach ($eventsprm as $k=>$v) {
      if ($v[2]!=1) continue;
      if (isset($GLOBALS["form_$k"]) && strlen($GLOBALS["form_$k"])>0) {
         if ($GLOBALS["form_$k"]=="1")
            $s[11]["e_{$etype}_$k"]=$info[11]["e_{$etype}_$k"]="1";
         else
            $s[11]["e_{$etype}_$k"]=$info[11]["e_{$etype}_$k"]="0";
      }
      else
         unset($s[11]["e_{$etype}_$k"],$info[11]["e_{$etype}_$k"]);
   }
   //exit(pr($sound).pr($_POST).pr($info[11]));
   dbsave($ni,$info);
   echo "<b>Сохранено!</b><br><br>
   <li><a href=$PHP_SELF?$sess>Перейти на страницу команд</a><br><br>
   <li><a href=$PHP_SELF?c=event&etype=$etype&ni=".ue($ni)."$sess><b>&lt;&lt;&lt; Вернуться на предыдущую страницу</b></a>
   (через 2 сек)";
   refresh("$PHP_SELF?c=event&etype=$etype&ni=".ue($ni)."$sess",2,__FILE__,__LINE__);
   break;



default:
   exit("\$c not set or unknown");

}

?>