BODY,TD,FONT { scrollbar-face-color: $scrollbar_face_color; scrollbar-shadow-color: $scrollbar_shadow_color; scrollbar-highlight-color: $scrollbar_highlight_color; scrollbar-3dlight-color:$scrollbar_3dlight_color; scrollbar-darkshadow-color: $scrollbar_darkshadow_color; scrollbar-track-color: $scrollbar_track_color; scrollbar-arrow-color: $scrollbar_arrow_color; }"; if (!defined('DIMA')) exit("?"); mainsecure(); checkref(); if (!$s[2] || $s['authnick']=='' || $s[3]<$admcmd['crazy']) exit("Не хватает уровня доступа для использования этой страницы.
Вы должны быть авторизированы с логином администратора уровня $admcmd[admin]."); if (isset($s['tempadmin']) || $s[3]!=$admlist[$s['authnick']]) exit("Вы не можете пользоваться этой страницей, т.к. являетесь временным, а не постоянным администратором."); if (isset($ni)) $ni=substr(trim(html(@strip_tags($ni))),0,100); $uni=ue(@$ni); $hni=html(@$ni); $trnames=array( "connect"=>"Все соединения", "connect_chat"=>"Соединение успешно, вход в чат", "connect_err"=>"Соединение с ошибкой", "connect_ignore"=>"Соединение под игнором", "out"=>"Исходящий трафик", "in"=>"Входящий трафик", "line_out"=>"Разослано сообщений", "line_in"=>"Считано сообщений" ); function small_stats() { global $serverpath, $trnames; $height=50; if (!file_exists($serverpath."/stats.tmp")) { echo "Файл $serverpath/stats.tmp не найден (возможно, чат-сервер не запущен)
"; return; } $f=fopen($serverpath."/stats.tmp","r") or err("Не могу открыть (r) $serverpath/stats.tmp"); $buf=fgets($f,2000); $timestart=intval(fgets($f,2000)); $opensocks=intval(fgets($f,2000)); $numignore=intval(fgets($f,2000)); $hostuptime=trim(fgets($f,2000)); $hostname=trim(fgets($f,2000)); $hostosname=trim(fgets($f,2000)); $chatversion=trim(fgets($f,2000)); $chattcl=trim(fgets($f,2000)); $chatpwd=trim(fgets($f,2000)); fclose($f); if (!isset($showstat)) echo "Убрать статистику"; else { small_stats(); stats(); } echo "
Текущая статистика, на данный момент:
"; echo "
  • Чат сервер запущен в ".date("H:i:s d/m/Y",$timestart)." (".duration(time()-$timestart)." назад)"; echo "
  • Сейчас открыто чат-севером сокетов: $opensocks"; echo "
  • Кол-во установленных пользователями игноров: $numignore"; echo "
  • Версия работающего чат-сервера: $chatversion"; echo "
  • Версия основной PHP части чата (не сервера): $GLOBALS[_vertext]"; echo "

    О сервере, где запущен чат-сервер, известно:"; echo "

  • Номер процесса чата, PID: ".myfile("$serverpath/dimachat.pid")."   (хранится в $serverpath/dimachat.pid)"; echo "
  • Внутреннее имя сервера (HostName): $hostname"; if ($hostuptime) echo "
  • Время работы сервера (UpTime): $hostuptime"; if ($hostosname) echo "
  • (О)перационная (С)истема: $hostosname"; echo "
  • TCL версия на сервере: $chattcl"; echo "
  • Абсолютный путь к daemon (FullPath): $chatpwd"; echo "

    Общая статистика за все время работы чат-сервера: "; preg_match_all("!([a-z_]+) ([0-9]+)!",$buf,$ok); foreach ($ok[1] as $k=>$v) { echo "

  • ".$trnames[$v].": ".statval($ok[2][$k])." ".($ok[2][$k]>9000?"(".$ok[2][$k].")":"").""; } echo "
         * Все счетчики рассчитаны только до 2Гб, далее они обнуляются (это касается исходящего трафика)

    "; } function stats() { global $serverpath, $trnames; $height=50; if (!file_exists($serverpath."/traffic.tmp")) { echo "Файл $serverpath/traffic.tmp не найден (возможно, чат-сервер не запущен)
    "; return; } $f=fopen($serverpath."/traffic.tmp","r") or err("Не могу открыть (r) $serverpath/traffic.tmp"); while (!feof($f)) { $tmp=explode(" ",fgets($f,10000)); if (count($tmp==1441)) { $buf[$tmp[0]]=$tmp; unset($buf[$tmp[0]][0]); } } fclose($f); //echo "

    ";print_r($buf);
    
       if (count($buf)>2) {
       echo"
    Подробная статистика:
    "; echo " Статистика поделена на часы и 5-ти минутные отрезки. Первое число: максимум за 5 минут, второе (ниже) - сумма за час. "; echo ""; $now=date("H")*12+floor(doubleval(date("i"))/5); foreach ($trnames as $k=>$v) { echo ""; } echo ""; echo "
    "; for ($i=0; $i<24; $i++) echo ""; echo "
    ".sprintf("%02d:00",$i)."
    $v
    "; $m=max($buf[$k]); for ($i=0; $i<24; $i++) { echo ""; } echo ""; for ($i=0; $i<24; $i++) { echo ""; } echo "
    "; for ($j=0; $j<12; $j++) { if ($m==0) echo ""; else { echo ""; } } echo "
    "; $mmax=0; $cnt=0; for ($j=0; $j<12; $j++) { if ($buf[$k][$i*12+$j+1]>$mmax) $mmax=$buf[$k][$i*12+$j+1]; $cnt+=$buf[$k][$i*12+$j+1]; } echo statval($mmax)."
    ".statval($cnt)."
    "; for ($i=0; $i<24; $i++) echo ""; echo "
    ".sprintf("%02d:00",$i)."
    "; } } if (!isset($c)) $c=""; switch($c) { case "": mainsecure(); include("z-web-part1.php"); include "admin_contact_conf.inc"; echo "
    Администрирование чата. Вы $s[nick] доступа +$s[3].
    "; echo "
  • ".morehelp('Администрирование модулей чата',"
      (фотогалерея только владелиц (+1000) (Администратирование базы данных чатеров (+1000) Поиск по данным чатера Антивирус только владелиц чата(+1001) Люди базы данных чатеров Эфекты в чат граф ники (+500)
    Конфигурация чата (+$admcmd[admin_chat]) Администраторы чата а так же модераторы Управление правами HTML/JS/PHP шаблоны всех скинов  (+$admcmd[admin_html] Шаблон регистрационной формы Шаблон регистрационной формы
    ",0,@$s['adminshowmenu'])."
  • ".morehelp('Дополнительные конфиги',"
      + Основной детектор флуда
    + Детектор повтора фраз
    + Детектор больших букв
    + Детектор повтора символов
    + Настройки спецэффектов и звуков
    + Настройки режимов безопасности
    + Немедленно войти в чат »
    ",0,@$s['adminshowmenu'])."
  • Управление Daemon Chat Server

    "; if (!$system_run) echo "
  • Команды запуска/останова/перезагрузки запрещены настройками (для включения поставьте: \$system_run=1)"; else { echo "\n
  • ".($system_manual_run?" ". "Вручную запустить чат-сервер | справка (+$admcmd[system_run])
    ": "Ручной запуск запрещен (см. \$system_manual_run)"); echo "\n
  • ".($system_manual_die?" Ручное завершение чат-сервера (+$admcmd[system_die])
    ": "Ручное завершение запрещено (см. \$system_manual_run)"); echo "\n
  • ".($system_manual_restart?" Полный перезапуск чат-сервера (+$admcmd[system_restart])
    ": "Перезапуск запрещен (см. \$system_manual_restart)"); } echo "
  • Легкая перезагрузка чат-сервера (+$admcmd[system_userlist])"; echo "
  • Полная очистка текущего юзерлиста (+$admcmd[system_userlist])"; echo "
  • Легкая перезагрука + очистка юзерлиста (+". max($admcmd['system_userlist'],$admcmd['system_lrestart']).")"; echo "
  • Синхронизировать списки ников (+$admcmd[fileutil])"; echo "
  • Обновить шаблоны: у всех скинов | у $skin (+$admcmd[system_loadskin])"; echo "
  • Стереть (обнулить) статистику по чату (+$admcmd[delstat])
    WARNING: Если вы нехрена не шарите для чего эти каманды не лезьте лучше сюда,а то руки отломаю."; echo "
  • "; echo "

    Информация о состоянии чата:

    "; if (!file_exists($frunstatus)) echo "Ни разу не запускался (т.к. файл $frunstatus не существует).
    Видимо вы пытаетесь сейчас поставить чат... Удачи :-)
    "; else { //$diff=time()-filemtime($frunstatus); $diff=max(0,time()-filemtime($frunstatus)); if ($diff<$system_timeout) echo "
  • сервак работает работает "; else echo "
  • сервак сдох запустите его Сдох!последний раз работал ".duration($diff)." назад. "; echo "$sessf
  • Игнорируемые хосты: (для админа от +$admcmd[unignore])
  • "; } echo "
    "; if (!isset($showstat)) echo "Статистика чата"; else { small_stats(); stats(); } echo "

    Контакты владельца чата:

    "; echo "
    Ник:$vladel_nik
    E-Mail:$email
    ICQ:$icq
    Сайт:$home_cite
    Skype:$skype
    "; ?> $v) { m_cmd("loadskin $k"); echo "
  • loadskin $k"; } } else { if (!isset($skinlist[$sskin])) exit("errAD565"); putlogadmin("перезагрузка фраз в файлах скина $sskin"); m_cmd("loadskin $sskin"); echo "
  • loadskin $sskin"; } echo "

    готово"; refresh("$PHP_SELF?c=$sess",2,__FILE__,__LINE__); exit; case "findusers": if ($s[3]<150) { exit("Доступ запрещен"); } set_time_limit(6000); include("z-web-part1.php"); echo backlinks(array('admin'))."Поиск по базе пользователей"; // Инициализация массива $_GET if (!isset($_GET['send'])) { $_GET=array( 'send'=>'', 'mail'=>'', // 'pass'=>'', 'location'=>'', 'height'=>'', 'icq'=>'', 'name'=>'', 'last_ip'=>'', 'last_brcode'=>'', 'last_referer'=>'' ); } print '

    e-mail: ICQ:
    Имя: Последний IP:
    Город: ID компьютера:
    Рост: Рефералы:
    Используйте значек *, если хотите искать во всем диапазоне либо А* если начинается с буквы А
    '; if ($_GET['send']) { print '
    Вы искали :::: '; if ($_GET['mail']) print '[e-mail: '.$_GET['mail'].']
    '; if ($_GET['name']) print '[имя: '.$_GET['name'].']
    '; // if ($_GET['pass']) print '[пароль: '.$_GET['pass'].']
    '; if ($_GET['location']) print '[город: '.$_GET['location'].']
    '; if ($_GET['last_ip']) print '[ip-адрес последнего входа: '.$_GET['last_ip'].']
    '; if ($_GET['last_brcode']) print '[ID компьютера: '.$_GET['last_brcode'].']
    '; if ($_GET['last_referer']) print '[Рефералы: '.$_GET['last_referer'].']
    '; if ($_GET['height']) print '[рост: '.$_GET['height'].']
    '; if ($_GET['icq']) print '[ICQ: '.$_GET['icq'].']
    '; print '
    '; $index="0123456789abcdef"; $buf=array(); echo ""; for ($i=0; $i<16; $i++) { $path=$dbpath."/$index[$i]/"; //echo "
    $path:"; if ($d=opendir($path)) { while ($fn=readdir($d)) { if ($fn[0]==".") continue; if (!preg_match("/^([a-f0-9]+)\.db2$/",$fn,$ok)) { echo " [$fn - файл неизвестного типа, пропущен]
    "; continue; } $nick=hex2nick($ok[1]); $res=dbload($nick,$info); if (!$res) continue; echo ""; if (isset($info['mail']) and $_GET['mail']) { $pat=sl(str_replace("*",".*",$_GET['mail'])); if (preg_match("/^".$pat."$/",sl($info['mail']),$tmp)) print ""; } if (isset($info['name']) and $_GET['name']) { $pat=sl(str_replace("\*",".*",preg_quote($_GET['name'],"/"))); if (preg_match("/^".$pat."$/",sl($info['name']),$tmp)) print ""; } // if ($s[3]>999 && isset($info['pass']) and $_GET['pass']) { // $pat=str_replace("*",".*",$_GET['pass']); // if (preg_match("/^".$pat."$/",$info['pass'],$tmp)) print "".$nick." (пароль: ".$info['pass'].")
    "; // } if (isset($info['location']) and $_GET['location']) { $pat=sl(str_replace("\*",".*",preg_quote($_GET['location'],"/"))); if (preg_match("/^".$pat."$/",sl($info['location']),$tmp)) print ""; } if (isset($info['height']) and $_GET['height']) { $pat=sl(str_replace("\*",".*",preg_quote($_GET['height'],"/"))); if (preg_match("/^".$pat."$/",sl($info['height']),$tmp)) print ""; } if (isset($info['icq']) and $_GET['icq']) { $pat=sl(str_replace("\*",".*",preg_quote($_GET['icq'],"/"))); if (preg_match("/^".$pat."$/",sl($info['icq']),$tmp)) print ""; } if (isset($info[11]["last_ip"]) and $_GET['last_ip']) { $pat=sl(str_replace("\*",".*",preg_quote($_GET['last_ip'],"/"))); if (preg_match("/^".$pat."$/",sl($info[11]["last_ip"]),$tmp)) print ""; } if (isset($info[11]["last_brcode"]) and $_GET['last_brcode']) { $pat=sl(str_replace("\*",".*",preg_quote($_GET['last_brcode'],"/"))); if (preg_match("/^".$pat."$/",sl($info[11]["last_brcode"]),$tmp)) print ""; } if (isset($info[11]["last_referer"]) and $_GET['last_referer']) { $pat=sl(str_replace("\*",".*",preg_quote($_GET['last_referer'],"/"))); if (preg_match("/^".$pat."$/",sl($info[11]["last_referer"]),$tmp)) print ""; } } closedir($d); } } echo ""; } echo "
    ".$nick." E-mail: ".$info['mail']."
    ".$nick." Имя: ".$info['name']."
    ".$nick." Город: ".$info['location']."
    ".$nick." Рост: ".$info['height']."
    ".$nick." icq: ".$info['icq']."
    ".$nick." LAST IP: ".$info[11]["last_ip"]."
    ".$nick." ID компьютера: ".$info[11]["last_brcode"]."
    ".$nick." Реферер: ".$info[11]["last_referer"]."
    "; print backlinks(array('admin')); include("z-web-part2.php"); break; case "run": mainsecure(); if (!$s[2] || $s[3]<$admcmd['system_run']) die("Access denied: you not admin level $admcmd[system_run]"); if (!$system_run) exit("Запуск чат-сервера запрещен"); if (!$system_manual_run) exit("Ручной запуск чат-сервера запрещен"); if ($system_cmdrun=="") exit("Не задана \$system_cmdrun"); putlogadmin("RUN, запуск чат-сервера"); if ($os==1) $tmp="ls l /"; if ($os==2 || $os==3) $tmp=getenv("ComSpec")." /c set"; echo "Проверяю, работает ли в вашем PHP system('$tmp') ...

    "; ob_start(); $tmp=`$tmp`; $obtmp=ob_get_contents(); ob_end_clean(); if ($obtmp!="") exit("Увы, system() не работает. PHP вернул ошибку на вызов этой фунции:

    ".$obtmp. "

    Это не ошибка чата. Обратитесь к администратору сервера, который заблокировал вызов этой функции из ваших PHP-скриптов."); echo "Работает! Пробую запустить чат-сервер: $system_cmdrun

    "; $curdir=getcwd(); chdir($dpath); $tmp=`$system_cmdrun`; chdir($curdir); echo "Гарантировать запуск нельзя, но попытка запуска завершилась без ошибки!

    "; echo "Через 10 секунд вы вернетесь назад (нажмите сюда)"; refresh("$PHP_SELF?c=$sess",10,__FILE__,__LINE__); exit(); case "die": needuser(); mainsecure(); if (!$s[2] || $s[3]<$admcmd['system_die']) die("Access denied: you not admin level $admcmd[system_die]"); putlogadmin("DIE, останов чат-сервера"); loaduser(1); foreach ($user as $k=>$v) { if ($k==$s['nick']) continue; include_once("src/misc.php"); quituser($k,"Chat-server shutdown. Sorry."); } saveuser(); include_once("src/msg.php"); m_all(SERVER,""); m_all(SERVER,""); m_all(SERVER,"


    Click here

    "); m_cmd("shutdown $s[nick]"); echo "Команда завершить чат послана!

    "; echo "Через 10 секунд вы вернетесь назад (нажмите сюда)"; refresh("$PHP_SELF?c=$sess",10,__FILE__,__LINE__); exit(); case "restart": mainsecure(); if ($s[2]!=1 || $s[3]<$admcmd['system_die']) die("Access denied: you not admin level $admcmd[system_die]"); putlogadmin("RESTART, перезагрузка чат-сервера"); m_cmd("restart $s[nick]"); echo "RESTART: Команда завершить чат послана!

    "; echo "Через 10 секунд вы вернетесь назад (нажмите сюда)"; refresh("$PHP_SELF?c=$sess",10,__FILE__,__LINE__); exit(); case "lrestart": mainsecure(); if ($s[2]!=1 || $s[3]<$admcmd['system_lrestart']) die("Access denied: you not admin level $admcmd[system_lrestart]"); cmsg_allnotice("Внимание! Чат-сервер перезагружается... Через несколько секунд вы сможете повторно войти в чат. ($c by $s[nick])"); putlogadmin("RESTART, перезагрузка чат-сервера"); m_cmd("lrestart"); echo "LRESTART: Чат-серверу послана команда легкой перезагрузки!

    "; echo "нажмите сюда"; refresh("$PHP_SELF?c=$sess",2,__FILE__,__LINE__); exit(); case "deluserlist": mainsecure(); if ($s[2]!=1 || $s[3]<$admcmd['system_userlist']) die("Access denied: you not admin level $admcmd[system_userlist]"); cmsg_allnotice("Внимание! Чат-сервер перезагружается... Через несколько секунд вы сможете повторно войти в чат. ($c by $s[nick])"); putlogadmin("DEL USERLIST: Очистка юзерлиста"); $user=array(); $f=fopen($fuser,"rb+") or err("errAD571: Не могу открыть $fuser (rb+)"); flock2($f,2,"errAD572: Не могу заблокировать $fuser",__FILE__,__LINE__); ftruncate($f,0); fputs($f,serialize($user)); fclose($f); echo "DEL USERLIST: Юзерлист очищен, все пользователи уничтожены!

    "; echo "нажмите сюда"; refresh("$PHP_SELF?c=$sess",2,__FILE__,__LINE__); exit(); case "delstat": mainsecure(); if ($s[2]!=1 || $s[3]<$admcmd['delstat']) die("Access denied: you not admin level $admcmd[delstat]"); putlogadmin("DELSTAT: Обнуление статистики"); $user=array(); $f=fopen($fchatstat,"rb+") or err("errAD571: Не могу открыть $fchatstat (rb+)"); flock2($f,2,"errAD572a: Не могу заблокировать $fchatstat",__FILE__,__LINE__); ftruncate($f,0); fputs($f,serialize($user)); fclose($f); echo "DELSTAT: Статистика обнулена

    "; echo "нажмите сюда"; refresh("$PHP_SELF?c=$sess",2,__FILE__,__LINE__); exit(); case "miscrestart": mainsecure(); if ($s[2]!=1 || $s[3]<$admcmd['system_lrestart']) die("Access denied: you not admin level $admcmd[system_lrestart]"); if ($s[2]!=1 || $s[3]<$admcmd['system_userlist']) die("Access denied: you not admin level $admcmd[system_userlist]"); cmsg_allnotice("Внимание! Чат-сервер перезагружается... Через несколько секунд вы сможете повторно войти в чат. ($c by $s[nick])"); putlogadmin("RESTART + DELUSERLIST, перезагрузка чат-сервера, очистка юзерлиста"); m_cmd("lrestart"); loaduser(1); $user=array(); saveuser(); echo "LRESTART: Чат-серверу послана команда легкой перезагрузки!

    "; echo "DEL USERLIST: Юзерлист очищен, все пользователи уничтожены!

    "; echo "нажмите сюда"; refresh("$PHP_SELF?c=$sess",2,__FILE__,__LINE__); exit(); case "chat": mainsecure(); if (!$s[2] || $s[3]<$admcmd['admin_chat']) die("Access denied: you not admin level $admcmd[admin_chat]"); // Подключение библиотеки phpLoginForm define("loginform",1); include_once("src/login_form.php"); // Сохраняем топик, чтобы позже проверить, не изменился ли $topic=$conf['topic']; $tignore=$conf['tignore']; // Сохраняем юзерлист, чтобы админы с доступом менее 1000 не изменяли его //$tmp_admlist=$conf['admlist']; // Если в данный момент не сабмитят форму, то грузим значения из конфига в форму if (!isset($form)) $buf=loginform_show("src/form_chat-config.txt",array(),$conf); else $buf=loginform_show("src/form_chat-config.txt"); // Если если ошибка от сабмита или сабмита вообще не было: if (!isset($onSubmit) || isset($error)) echo $buf; // Если в данный был сабмит и не было ошибок: else { // Повторно грузим настройки из конфига. loadconf(1); foreach ($form as $k=>$v) { if ($k[0]=="_" || strval(intval($k))==="$k") continue; $conf[$k]=$form[$k]; } foreach ($conf as $k=>$v) { if ($k[0]=="_" || strval(intval($k))==="$k") continue; if (!isset($form[$k])) { unset($conf[$k]); continue; } } //pr($form);pr($conf);exit; // Сохраняем настройки из формы в конфиг. saveconf(); putlogadmin("Измение настроек 'основного конфига'"); // Если изменился топик - показываем обновление в чате. if ($topic!=$form['topic']) topicsave($topic, $form['topic']); // Если изменился список игноров if ($conf['tignore']!=$tignore) { include_once("src/msg.php"); userload(1); m_del_totalignore("*"); foreach ($user as $k=>$v) { if (isset($v['tignore'])) { unset($user[$k]['tignore']); cmsg_admin(10,"Removed total ignore for ".html($k)." (command by ".html($s['nick']).", admin.php)"); } } $tmp=explode(" ",trim(preg_replace("! +!"," ",sl($conf['tignore'])))); foreach ($tmp as $ni) { if ($ni=finduser($ni)) { m_add_totalignore($ni); $user[$ni]['tignore']=1; cmsg_admin(10,"New total ignore for ".html($ni)." (command by ".html($s['nick']).", admin.php)"); } } usersave(); } if (isset($ButtonType) && $ButtonType) echo $buf; else refresh("$self?$sess",0,__FILE__,__LINE__); } break; case "html": if (!$s[2] || $s[3]<$admcmd['admin_html']) die("Access denied: you not admin level $admcmd[admin_html]"); if (!isset($s['editskin'])) $s['editskin']=$skindefuser; if (isset($newskin)) if(!preg1($newskin)) exit("errAD695"); else $s['editskin']=$newskin; $sk=$s['editskin']; include("z-web-part1.php"); echo "

    Редактирование шаблонов

    ". backlinks(array("admin"))."
    $sessf Текущий скин:
    "; $dir=opendir("$skindir/$sk") or exit("

    errAD608: $skindir/$sk не найден"); while (($f=readdir($dir))!==false) { $fn="$skindir/$sk/$f"; if ($f=="." || $f==".." || is_dir($fn)) continue; $files[]=$f; } closedir($dir); sort($files); foreach ($files as $f) { $fn="$skindir/$sk/$f"; preg_match("!\.(php|js|html|css|jpg|gif|png|txt)$!s",$f,$ok); $ext=@strval($ok[1]); $type=""; $info=""; $edit=1; switch ($f) { case "__skin1.php": $info="Основные настройки внешнего вида скина"; $type="настройки"; break; case "__skin2.php": $info="Многочисленые настройки скина"; $type="настройки"; break; case "z-web-part1.php": $info="Шаблон верхней части всех полноэкранных страниц"; $type="шаблон"; break; case "z-web-part2.php": $info="Шаблон нижней части всех полноэкранных страниц"; $type="шаблон"; break; case "msg_join_female.txt": case "msg_join_male.txt": case "msg_join_user.txt": case "msg_part_female.txt": case "msg_part_male.txt": case "msg_part_user.txt": case "msg_ban_mat.txt": $type="фразы"; break; } if ($type=="") { switch ($ext) { case "html": $type="шаблон"; break; case "js": $type="JavaScript"; break; case "css": $type="стили"; break; case "jpg": case "gif": case "png": $type="картинка"; $info="смотреть"; $edit=0; break; } } if ($info=="") { $d=fopen($fn,"rb") or err("errAD672: can't open $fn"); $buf=fread($d,1000); fclose($d); if (preg_match("!^#\\$#\\$([^\r\n]+)!m",$buf,$tmp)) $info=trim($tmp[1]); } if ($ext=="php" && $s[3]<$admcmd['admin_htmlphp']) $edit=0; echo "

    ". "". "". ""; } echo "
    Файл Тип Описание Размер Изменен
    ". ""; if ($ext && $edit) echo "$f"; else echo "$f"; echo "$type{$info} ".filesize($fn)."".date("d.m.Y H:i",filemtime($fn))."
    "; include("z-web-part2.php"); break; case "htmledit": if (!$s[2] || $s[3]<$admcmd['admin_html']) die("Access denied: you not admin level $admcmd[admin_html]"); if (!isset($s['editskin'])) refresh("$PHP_SELF?c=html$sess",0,__FILE__,__LINE__); if (!preg1($fn)) exit("errAD696"); $sk=$s['editskin']; if (strpos(sl($fn),".php")!==false && $s[3]<$admcmd['admin_htmlphp'] || !preg_match("!\.(php|js|html|css|txt)$!s",$fn)) { putlogadmin("HACK DETECT, попытка редактировать файл путем подделки ссылок"); exit("errAD777: HACK DETECT"); } if ($md!==md5("$rand_password $s[authnick] $s[0] $sk $fn")) exit("errAD785: устаревшая ссылка"); include("z-web-part1.php"); echo "

    Редактирование шаблона $fn скина $sk

    ". backlinks(array("к списку шаблонов"=>"$PHP_SELF?c=html"))."
    $asessf "; if (!file_exists("$skindir/$sk/$fn")) exit("errAD971: файл $fn не найден"); $f=@fopen("$skindir/$sk/$fn","rb+"); if (!$f) { echo "Нет прав открыть файл $fn для редактирования. Поставьте chmod 777 $skindir/$sk/$fn или сразу chmod -R 777 skindir.



    "; include("z-web-part2.php"); exit; } $buf=fread($f,filesize("$skindir/$sk/$fn")); fclose($f); echo "
    "; echo "

    "; include("z-web-part2.php"); break; case "htmleditpost": if (!$s[2] || $s[3]<$admcmd['admin_html']) die("Access denied: you not admin level $admcmd[admin_html]"); if (!isset($s['editskin'])) refresh("$PHP_SELF?c=html$sess",0,__FILE__,__LINE__); if (!preg1($fn)) exit("errAD696: HACK DETECT"); $sk=$s['editskin']; if (strpos(sl($fn),".php")!==false && $s[3]<$admcmd['admin_htmlphp']) { putlogadmin("HACK DETECT, попытка редактировать PHP файл путем подделки ссылок"); exit("errAD777: HACK DETECT"); } if ($md!==md5("$rand_password $s[authnick] $s[0] $sk $fn")) exit("errAD785: устаревшая ссылка"); checkhack("htmledit",__FILE__,__LINE__); putlogadmin("правка $skindir/$sk/$fn"); $f=@fopen("$skindir/$sk/$fn","rb+"); if (!$f) exit("errAD764: can't open $skindir/$sk/$fn (rb+)"); flock2($f,2,"errAD765: can't lock $skindir/$sk/$fn",__FILE__,__LINE__); ftruncate($f,0); fputs($f,$text); fclose($f); if (isset($save1)) refresh("$PHP_SELF?c=html$sess",0,__FILE__,__LINE__); else refresh("$PHP_SELF?c=htmledit&fn=$fn&md=$md$sess",0,__FILE__,__LINE__); break; case "unignore": mainsecure(); if (!$s[2] || $s[3]<$admcmd['unignore']) die("Access denied: you not admin level $admcmd[unignore]"); if ($host=="+") die(""); if (!preg_match("!^[a-z0-9.-]{1,500}$!",$host)) err("Указан ошибочный хост в конмаде снятия игнора [$host]",__FILE__,__LINE__); m_cmd("unignore $host"); echo "Ok!"; refresh("$self?$sess",0,__FILE__,__LINE__); break; case "update_nicklist": mainsecure(); if (!$s[2] || $s[3]<$admcmd['fileutil']) die("Access denied: you not admin level $admcmd[fileutil]"); // максимальное время работы этого скрипта: 5 минут @set_time_limit(300); @ini_set("max_execution_time",300); @ignore_user_abort(1); $t=time(); putlogadmin("Синхронизация nicks.txt"); clearstatcache(); $f=fopen($fnicklist,"rb+") or err("errAD459: не могу открыть $fnicklist - нет прав или файл не найден",__FILE__,__LINE__); flock2($f,2,"errAD460: не могу заблокировать $fnicklist",__FILE__,__LINE__); $index="0123456789abcdef"; $buf=array(); echo ""; for ($i=0; $i<16; $i++) { $path=$dbpath."/$index[$i]/"; echo "
    $path:"; if ($d=opendir($path)) { while ($fn=readdir($d)) { if ($fn[0]==".") continue; if (!preg_match("/^([a-f0-9]+)\.db2$/",$fn,$ok)) { if (!preg_match("/\.db2foto$/",$fn)) echo " [$fn - файл неизвестного типа, пропущен] "; continue; } $nick=hex2nick($ok[1]); $buf[]=$nick; echo " $fn=>$nick | "; } closedir($d); } } sort($buf); $buf=" ".implode(" ",$buf); fputs($f,$buf); ftruncate($f,strlen($buf)); fclose($f); echo "

    Готово за ".(time()-$t)." сек!
    <<< вернуться

    done!"; break; case "admin_list": conf2admlist(); $slnick=sl($s['authnick']); $my=$adminfo[$slnick]; if ($s[3]<$admcmd['adminview']) exit("Access denied

    Необходим доступ +".$admcmd['adminview']); include("z-web-part1.php"); $dt=date("Y-m-d"); $v=date("H:i:s"); include "admin_contact_conf.inc"; echo "

    Список администраторов и модераторов чата $wwwhost
    Чат версии: $_vertext

    "; echo "
    Здраствуйте $s[nick] вы доступа: +$s[3].
    Сегодня:$dt
    Время:$v

    "; $xtable=""; $i=0; if (count($admlist)) foreach ($admlist as $k=>$v) { if (!dbload($k,$info)) $name="Пользователь не существует, зарегистрируйте логин!"; else $name=@$info['name']; $uni=ue($k); $inf=$adminfo[$k]; $xtable.= "". "".html($k).", ".html($name)."". "".duration(time()-$info[11]['last_join'])." назад". "".@$info[11]['last_ip']."". "$v". "{$adminfo[$k]['susp']}". "{$adminfo[$k]['susp']}". "".date("d.m.Y H:i",$adminfo[$k]['time']).", {$adminfo[$k]['by']}". ""; if ($adminfo[$k]['dead']) $xtable.="Пользователь заблокирован по команде ". html($adminfo[$k]['deadby']).", ".date("d.m.Y H:i",$adminfo[$k]['deadtime'])."
    "; $xtable.=html($adminfo[$k]['info'])."
    "; if ($inf['dead']==0 && $s[3]>=$admcmd['admin_list'] && $my['edit']>=$v && ($s[3]>$v || $s[3]==1000)) $xtable.="\x38"; if ($inf['dead']==0 && $my['susp']>=$v) $xtable.=" \x78"; if ($inf['dead']==1 && $s[3]==1000) $xtable.=" \x59"; if ($s[3]>=$admcmd['admin_list'] && $my['edit']>=$v && ($s[3]>$v || $s[3]==1000)) $xtable.=" \x72"; $xtable.="\n\n"; $i++; } $xaddadmin=""; $xaddadmin=morehelp("Создать новый доступ для пользователя»",xparse(skn('admin_list_addadmin.html')),0); if ($my['edit']>0 && $s[3]>=$admcmd['admin_list']) $xlevel1=max($admcmd['admin'],$admcmd['adminview']); $xmorehelp="

    ".morehelp("",xparse(skn('admin_list_help.html'))); echo xparse(skn("admin_list.html")); echo "

    Последние просмотры этой страницы: "; include_once("src/misc.php"); history_view("$chatpath/adminlisthist.tmp",5,7*24*60*60,0); echo "

    ".backlinks(array('admin','login')); echo "


    "; include("z-web-part2.php"); break; case "rights_admin": if ($s[3]<$admcmd['adminview']) exit("Access denied

    Необходим доступ +".$admcmd['adminview']); include("z-web-part1.php"); echo "

    Справка о правах, доступных администратору: $ni

    ".backlinks(array('adminlist')); if (!isset($admlist[$ni])) exit("Этот пользователь не является администратором"); $r=$adminfo[sl($ni)]; $a=$admlist[sl($ni)]; if (sl($ni)==sl($admfirst)) echo "Это владелец чата, обладает правами уровня 1000 и дополнительно: не может быть удален, лишен доступа или заблокирован.

    "; else echo "Это администратор чата уровня $a.

    "; if ($a>=$admcmd['admin'] && $a>=$admcmd['adminview']) { if ($r['edit']>=$admcmd['admin_list'] && $r['edit']>0) { if ($a==1000) echo "Есть право добавить/изменить/удалить админа любого уровня с любыми правами.

    "; else echo "Есть право добавить нового администратора, наделив того: доступом - от 1 до ".min($r['edit'],$a-1).", правом Edit* - от 0 до ".($r['edit']-1).", правом Suspend* - от 0 до ".$r['susp'].". Причем, назначать кому-либо доступ меньше +$admcmd[adminview] не имеет смысла, т.к. попасть на страницу администрирования будет нельзя!

    "; $nicks=array(); foreach ($admlist as $k=>$v) if ($v".html($k)." ($admlist[$k])"; if ($nicks) echo "Из числа уже существующих админов имеет право редактировать:

      ".implode("",$nicks)."

    "; else echo "Из числа уже существующих админов не имеет право редактировать ни одного.

    "; } else echo "Индивидуальным правом редактировать, удалять и добавлять доступ не обладает.

    "; if ($r['susp']>0) { $nicks=array(); foreach ($adminfo as $k=>$v) if (sl($s['authnick'])!=$k && $r['susp']>=$admlist[$k]) $nicks[]="

  • ".html($k)." ($admlist[$k])"; if ($nicks) echo "Имеет право заблокировать следующих людей:
      ".implode("",$nicks)."

    "; else echo "Из числа уже существующих админов не имеет право заблокировать ни одного."; } else echo "Индивидуальным правом блокировать доступ других админов не обладает.

    "; } else { echo "Этот администратор не может воспользоваться правами, т.к. его доступ ниже необходимого для входа на страницу редактирования администраторов.

    "; } echo "

    Общие права, доступные для уровня $a:

    "; include_once("src/update_admcmd.php"); echo ""; foreach ($admcmd_def as $k=>$v) { foreach ($v as $kk=>$vv) { if ($admcmd[$kk]<=$a && $admcmd[$kk]>0) echo ""; } } echo "
    Название
    права
    Мин.
    доступ
    Подробное описание
    $kk$vv[0]".html($vv[1])."
    "; include("z-web-part2.php"); break; case "add_admin": conf2admlist(); $my=sl($s['authnick']); if ($s[3]<$admcmd['admin_list'] || !isset($adminfo[$my])) exit("access deined"); if (strlen($susp)==0) $susp=min(intval($access),$adminfo[$my]['susp']-1); if ($s[3]<1000) { $maxaccess=max(0,min($s[3]-1,intval($adminfo[$my]['edit']))); $maxedit=$maxaccess; $maxsusp=intval($adminfo[$my]['susp']); } else { $maxaccess=$maxedit=$maxsusp=1000; } $access=min(abs(intval($access)),1000); $edit=min(abs(intval($edit)),1000); $susp=min(abs(intval($susp)),1000); if ($access>$maxaccess) { alert("Вы не можете назначить уровень пользователя $access. Устанавливаю $maxaccess"); $access=$maxaccess; } if ($edit>$maxedit) { alert("Вы не можете назначить Edit* уровня $edit. Устанавливаю $maxedit"); $edit=$maxedit; } if ($susp>$maxsusp) { alert("Вы не можете назначить Suspend* уровень $susp. Устанавливаю $maxsusp"); $susp=$maxsusp; } if ($access==0) exit("Доступ уровня 0 назначать нельзя"); $nick1=$nick; $nick=sl(substr(strip_tags(trim($nick)),0,100)); if (isset($admlist[$nick])) exit("Пользователь уже имеет доступ и находится в списке админов"); if (!empty($create)) { if ($conf['newreg']==1) exit("Регистрация новых пользователей запрещена"); if ($conf['newreg']==4 && $s[3]<900) exit("Регистрация новых пользователей разрешена только админам +900"); if ($conf['newreg']==5 && $s[3]<1000) exit("Регистрация новых пользователей разрешена только админам +1000"); include_once("src/misc.php"); check_reg_nick($nick1,$error); if (isset($error)) { echo "При попытке регистрации нового ника ".html($nick)." найдены ошибки в самом нике:"; foreach ($error['nick'] as $k=>$v) echo "

  • $v"; exit; } if (dbload($nick1,$info)) err("errAD1353"); $info=array( 'nick'=>$nick1, 'pass'=>substr(html(strip_tags($pass)),0,100), 11=>array( 'reg_time'=>time(), ), ); dbsave($nick1,$info); echo "Новый пользователь создан!

  • Ник: $nick
  • Пароль: $info[pass]

    Не нажимайте Обновить(Refresh). Запишите пароль созданного пользователя.


    "; } if (!dbload($nick,$info)) { include("z-web-part1.php"); echo "

    Пользователь $nick не существует



    $asessf Создать нового пользователя и добавить доступ:
    Ник    Пароль   


    <<< Отменить и вернуться назад



    "; include_once("src/misc.php"); check_reg_nick($nick1,$error); if (isset($error)) { echo "Внимание! Будущий ник ".html($nick)." не будет зарегистрирован из-за его недопустимости:"; foreach ($error['nick'] as $k=>$v) echo "

  • $v"; } include("z-web-part2.php"); break; } loadconf(1); $admlist[$nick]=$access; $adminfo[$nick]=array( 'edit'=>$edit, 'susp'=>$susp, 'dead'=>0, 'time'=>time(), 'by'=>$s['authnick'], 'info'=>empty($comm)?"Доступ создан по команде $s[authnick]":substr($comm,0,1024), ); saveconf(); putlogadmin(">>> НОВЫЙ АДМИНСКИЙ ДОСТУП ДЛЯ '$nick': Access=$access, Edit=$edit, Suspend=$susp"); $link="$PHP_SELF?c=admin_list$sess"; if (empty($create)) refresh($link,0,__FILE__,__LINE__); else echo "<<< Вернуться к списку администраторов"; break; case "delete_admin": conf2admlist(); $ni=sl($ni); $my=sl($s['authnick']); if ($s[3]<$admcmd['admin_list'] || $ni==sl($admfirst)) exit("access denied"); if (!isset($admlist[$ni]) || !isset($adminfo[$my])) exit("user not found"); if ($admlist[$ni]>=$s[3] && $my!=$ni && $s[3]<1000) exit("Нельзя удалять доступ более высоким админам или имеющим такой же доступ"); if ($adminfo[$my]['edit']<$admlist[$ni]) exit("Ваша право Edit* уровня +{$adminfo[$my]['edit']} меньше, чем доступ +$admlist[$ni] удаляемого пользователя"); putlogadmin(">>> УДАЛЕНИЕ ДОСТУПА +$admlist[$ni] ДЛЯ '$ni'"); loadconf(1); unset($admlist[$ni]); unset($adminfo[$ni]); saveconf(); refresh("$PHP_SELF?c=admin_list$sess",0,__FILE__,__LINE__); break; case "suspend_admin": conf2admlist(); $ni=sl($ni); $my=sl($s['authnick']); if ($ni==sl($admfirst)) exit("access denied"); if (!isset($admlist[$ni]) || !isset($adminfo[$my])) exit("user not found"); if ($adminfo[$my]['susp']<$admlist[$ni] && $ni!=$my) exit("Ваша право Suspend* уровня +{$adminfo[$my]['susp']} меньше, чем доступ +$admlist[$ni] блокируемого пользователя"); if ($adminfo[$ni]['dead']) exit("Пользователь уже заблокирован"); putlogadmin(">>> Блокировка $ni"); loadconf(1); $adminfo[$ni]['dead']=1; $adminfo[$ni]['deadby']=$s['authnick']; $adminfo[$ni]['by']=$s['authnick']; $adminfo[$ni]['deadtime']=time(); $adminfo[$ni]['time']=time(); saveconf(); refresh("$PHP_SELF?c=admin_list$sess",0,__FILE__,__LINE__); break; case "unsuspend_admin": conf2admlist(); $ni=sl($ni); $my=sl($s['authnick']); if ($s[3]<1000) exit("access denied"); if (!isset($admlist[$ni]) || !isset($adminfo[$ni])) exit("user not found"); if (!$adminfo[$ni]['dead']) exit("Пользователь не блокировался ранее"); putlogadmin(">>> Снятие блокировки $ni"); loadconf(1); unset($adminfo[$ni]['deadby'],$adminfo[$ni]['deadtime']); $adminfo[$ni]['dead']=0; $adminfo[$ni]['by']=$s['authnick']; $adminfo[$ni]['time']=time(); saveconf(); refresh("$PHP_SELF?c=admin_list$sess",0,__FILE__,__LINE__); break; case "edit_admin": conf2admlist(); $ni=sl($ni); if ($s[3]<$admcmd['admin_list']) exit("access denied"); if (!isset($admlist[$ni]) || !isset($adminfo[$ni]) || !isset($adminfo[sl($s['authnick'])])) exit("user not found"); $my=$adminfo[sl($s['authnick'])]; if ($adminfo[$ni]['dead']) exit("Пользователь заблокирован"); if ($s[3]<1000 && ($s[3]<=$admlist[$ni] || $my['edit']<$admlist[$ni])) exit("Вашего доступа недостаточно, что редактировать этого администратора"); $access=intval($access); $edit=intval($edit); $susp=intval($susp); $comm=substr(strip_tags($comm),0,1000); if ($access>1000) $access=1000; if ($edit>1000) $edit=1000; if ($susp>1000) $susp=1000; if ($access<0) $access=0; if ($edit<0) $edit=0; if ($susp<0) $susp=0; if ($ni==sl($admfirst)) { $access=1000; $edit=1000; $susp=1000; } elseif ($s[3]==1000) { if ($access<1000) { $edit=min($edit,$my['edit'],$s[3]-1,$access,1000); $susp=min($susp,$my['susp'],1000); } } else { $access=min($access,$my['edit'],$s[3]-1,1000); $edit=min($edit,$my['edit'],$s[3]-1,$access,1000); $susp=min($susp,$my['susp'],1000); } if (isset($usersl[$ni])) { loaduser(1); $user[$usersl[$ni]]['admin']=$access; saveuser(); } loadconf(1); $admlist[$ni]=$access; $adminfo[$ni]['edit']=$edit; $adminfo[$ni]['susp']=$susp; $adminfo[$ni]['info']=$comm; $adminfo[$ni]['by']=$s['authnick']; $adminfo[$ni]['time']=time(); saveconf(); refresh("$PHP_SELF?c=admin_list$sess",0,__FILE__,__LINE__); break; case "admin_level": include("z-web-part1.php"); echo "

    Уровни прав администраторов

    ".backlinks(array('admin')). " Право менять уровни доступа администраторов может только владелец чата.
    $asessf "; include("src/update_admcmd.php"); foreach ($admcmd_def as $k=>$v) { echo ""; foreach ($v as $kk=>$vv) { if (!isset($admcmd[$kk])) { loadconf(1); $admcmd[$kk]=$vv[0]; saveconf(); } echo ""; } } echo "
    Название
    права
    ДоступПодробное описание
    ".$admcmd_name[$k]."
    $kk".html($vv[1])."

    "; if ($s['authnick']==sl($admfirst)) echo "
    "; echo "

    "; include("z-web-part2.php"); break; case "admin_level_post": if ($s['authnick']!=sl($admfirst)) exit("access denied"); loadconf(1); if (!isset($allreset)) { foreach ($admcmd as $k=>$v) { if (isset($form[$k])) $conf['_admcmd'][$k]=intval($form[$k]); } alert("Новые значения записаны"); } else { include("src/update_admcmd.php"); $admcmd=array(); foreach ($admcmd_def as $k=>$v) { foreach ($v as $kk=>$vv) { $conf['_admcmd'][$kk]=$vv[0]; } } alert("Настройки по-умолчанию восстановлены"); } saveconf(); refresh("$PHP_SELF?c=admin_level$sess",0,__FILE__,__LINE__); break; case "view_good": if ($s[3]<300) exit("access denied"); $val=explode("--","все пользователи, даже не авторизованные--только любые авторизованные--только [не модерированные] или [одобренные]--только [одобренные]--только администраторы +1 и выше"); $name=array( 'join'=>'Какого типа пользователи могут входить в чат', 'talk'=>'Какого типа пользователи могут писать в чат обычные (не приватные) сообщения', 'talkpriv'=>'Какого типа пользователи могут писать в чат приватные сообщения', 'view'=>'Какого типа пользователи могут смотреть регистрационные анкеты других пользователей', ); include("z-web-part1.php"); echo "

    Просмотр настроек основного конфига

    ". backlinks(array('admin','к странице справки'=>"help.php?help=12$sess")); foreach ($name as $k=>$v) { echo "

    $v:

  • ".$val[$conf[$k]].""; } include("z-web-part2.php"); break; case "cnfvar": if ($s[3]<300) exit("access denied"); include_once("src/cnfvar.php"); $var=substr(@html($var),0,10); $proc="cnfvar_init_$var"; if (function_exists($proc)) $proc(); //pr($cnfvardef[$var]); //pr($cnfvar[$var]); if (!isset($cnfvar[$var])) exit("errAD1274: \$var=$var не существует в \$cnfvar"); $s['adminshowmenu']=time(); include("z-web-part1.php"); $xform=cnfvarform('form',myfile(skn('cnfvar_table.html')),$cnfvar[$var],$conf["_$var"]); $xantihack=antihack('cnfvar'); $xbacklinks=backlinks(array('admin')); if ($s['authnick']===sl($admfirst)) { $xsubmit="

    "; } else $xsubmit="

    Изменить и сохранить настройки может только владелец чата (вы - не можете)."; echo xparse(skn("cnfvar_$var.html")); if ($s['authnick']===sl($admfirst) && $s[3]===1000) { echo "

    Команды: [Восстановить настройки по-умолчанию] "; if ($var=="msg") { echo "[Добавить новое правило] "; foreach ($conf["_msg"]['rules'] as $k=>$v) echo "[Удалить правило N".($k+1)."] "; } echo ""; } include("z-web-part2.php"); break; case "cnfvar_msgadd": checkhack('cnfvar',__FILE__,__LINE__); if ($s[3]<1000 || $s['authnick']!==sl($admfirst)) exit("access denied"); include_once("src/cnfvar.php"); loadconf(1); $conf['_msg']['rules'][]=$cnfvardef['msg']['rules'][0]; saveconf(); exit(refresh("$PHP_SELF?c=cnfvar&var=msg",0,__FILE__,__LINE__)); case "cnfvar_msgdel": checkhack('cnfvar',__FILE__,__LINE__); if ($s[3]<1000 || $s['authnick']!==sl($admfirst)) exit("access denied"); include_once("src/cnfvar.php"); loadconf(1); if (count($conf['_msg']['rules'])==1) { alert("Все правила удалять нельзя. Должно быть хотябы одно. Для отключения детектора - читайте справку."); } else { unset($conf['_msg']['rules'][intval($num)]); saveconf(); } exit(refresh("$PHP_SELF?c=cnfvar&var=msg",0,__FILE__,__LINE__)); case "cnfvar_def": checkhack('cnfvar',__FILE__,__LINE__); if ($s[3]<1000 || $s['authnick']!==sl($admfirst)) exit("access denied"); include_once("src/cnfvar.php"); $var=substr(@html($var),0,10); $proc="cnfvar_init_$var"; if (function_exists($proc)) $proc(); if (!isset($cnfvar[$var])) exit("errAD1318"); loadconf(1); $conf["_$var"]=$cnfvardef[$var]; $conf=sortarray($conf); saveconf(); exit(refresh("$PHP_SELF?c=cnfvar&var=$var",0,__FILE__,__LINE__)); case "cnfvarpost": checkhack('cnfvar',__FILE__,__LINE__); if ($s[3]<1000 || $s['authnick']!==sl($admfirst)) exit("access denied"); include_once("src/cnfvar.php"); $var=substr(@html($var),0,10); $proc="cnfvar_init_$var"; if (function_exists($proc)) $proc(); if (!isset($cnfvar[$var])) exit("errAD1318 $var"); loadconf(1); $conf["_$var"]=cnfvarcheck($var,$form,$cnfvar[$var],$cnfvardef[$var]); saveconf(); exit(refresh("$PHP_SELF?c=cnfvar&var=$var",0,__FILE__,__LINE__)); break; } ?>