View file includes/functions.php

File size: 62.01Kb
<?php
if (!defined('BASEDIR')) { header("Location:../index.php"); exit; }

//--------------------------- Функция перевода секунд во время -----------------------------//
function maketime($string) {
if($string < 3600){
$string = sprintf("%02d:%02d", (int)($string / 60) % 60, $string % 60); 
}else{
$string = sprintf("%02d:%02d:%02d", (int)($string / 3600) % 24, (int)($string / 60) % 60, $string % 60); 	
}
return $string; 
}

//--------------------------- Функция перевода секунд в дни -----------------------------//
function makestime($string) {

$day = floor($string / 86400); 
$hours = floor(($string / 3600) - $day * 24); 
$min = floor(($string - $hours * 3600 - $day * 86400) / 60); 
$sec = $string - ($min * 60 + $hours * 3600 + $day * 86400);

return sprintf("%01d дн. %02d:%02d:%02d", $day, $hours, $min, $sec); 
}

//--------------------------- Функция временного сдвига -----------------------------//
function date_fixed($timestamp, $format="d.m.y / H:i"){
global $config;

if(!ctype_digit($timestamp)){$timestamp = SITETIME;}
$shift = $config['timeclocks']*3600;
$datestamp = date($format,$timestamp + $shift);
$today = date("d.m.y",SITETIME + $shift);

$datestamp = str_replace($today,'Сегодня',$datestamp);
$search = array('January','February','March','April','May','June','July','August','September','October','November','December');
$replace = array('Января','Февраля','Марта','Апреля','Мая','Июня','Июля','Августа','Сентября','Октября','Ноября','Декабря');
$datestamp = str_replace($search, $replace, $datestamp);

return $datestamp;
}

//------------------- Функция полного удаления юзера --------------------//
function delete_users($users){

$string = search_string(DATADIR."bank.dat", $users, 1);
if ($string) {
delete_lines(DATADIR."bank.dat", $string['line']);
}

$substring = search_string(DATADIR."subscribe.dat", $users, 3);
if ($substring) {
delete_lines(DATADIR."subscribe.dat", $substring['line']);
}

if (file_exists(DATADIR."profil/$users.prof")) {unlink (DATADIR."profil/$users.prof");}
if (file_exists(DATADIR."privat/$users.priv")) {unlink (DATADIR."privat/$users.priv");}
if (file_exists(DATADIR."dataoutput/$users.priv")) {unlink (DATADIR."dataoutput/$users.priv");}
if (file_exists(DATADIR."dataavators/$users.gif")) {unlink (DATADIR."dataavators/$users.gif");}
if (file_exists(DATADIR."dataraiting/$users.dat")) {unlink (DATADIR."dataraiting/$users.dat");}
if (file_exists(DATADIR."dataignor/$users.dat")) {unlink (DATADIR."dataignor/$users.dat");}
if (file_exists(DATADIR."datakontakt/$users.dat")) {unlink (DATADIR."datakontakt/$users.dat");}
if (file_exists(DATADIR."datalife/$users.dat")) {unlink (DATADIR."datalife/$users.dat");}

return $users;
}


//--------------- Функция правильного окончания для денег -------------------//
function moneys($string){

$string = (int)$string;

$str1 = abs($string) % 100; 
$str2 = $string % 10; 

if ($str1 > 10 && $str1 < 20) return $string.' чатлов'; 
if ($str2 > 1 && $str2 < 5) return $string.' чатла'; 
if ($str2 == 1) return $string.' чатл'; 

return $string.' чатлов';

}


//------------------- Функция очистки файла --------------------//
function clear_files($files){

if (file_exists($files)){
$file = file($files);
$fp = fopen($files,"a+");
flock ($fp,LOCK_EX);
ftruncate ($fp,0);
fflush($fp);
flock ($fp,LOCK_UN);
fclose($fp);
}
}

//------------------- Функция удаления строк(и) из файла --------------------//
function delete_lines($files, $lines){

if ($lines!==""){
if (file_exists($files)){

if(!is_array($lines)){

$file=file($files);
$fp=fopen($files,"a+");
flock ($fp,LOCK_EX);
ftruncate ($fp,0);
if (isset($file[$lines])){unset($file[$lines]);}
fputs ($fp, implode($file));
fflush($fp);
flock ($fp,LOCK_UN);
fclose($fp); 
unset ($lines);

} else {

$file=file($files);
$fp=fopen($files,"a+");
flock ($fp,LOCK_EX);
ftruncate ($fp,0);
foreach($lines as $val){ 
if (isset($file[$val])){unset($file[$val]);}
}
fputs ($fp, implode($file));
fflush($fp);
flock ($fp,LOCK_UN);
fclose($fp); 
unset ($lines);

}}}
}

//------------------- Функция сдига строки в файле --------------------//
function move_lines($files, $lines, $where){

if (file_exists($files)){
if ($lines!==""){
if ($where!==""){

if ($where==1) {$lines2 = $lines + 1;} else {$lines2 = $lines - 1;}

$file = file($files);

if (isset($file[$lines]) && isset($file[$lines2])){

$fp = fopen($files, "a+");
flock ($fp,LOCK_EX);
ftruncate ($fp,0);

foreach($file as $key=>$val){ 

if ($lines==$key) {

fputs($fp, $file[$lines2]);

} elseif ($lines2==$key){

fputs($fp, $file[$lines]);

} else {
fputs($fp,$val);
}
}

fflush($fp);
flock ($fp,LOCK_UN);
fclose($fp);

}}}}
}


//------------------- Функция замены строки в файлe --------------------//
function replace_lines($files, $lines, $text){

if (file_exists($files)){
if ($lines!==""){
if ($text!=""){

$file = file($files);
$fp = fopen($files, "a+");
flock ($fp,LOCK_EX);
ftruncate ($fp,0);

foreach($file as $key=>$val){ 

if ($lines==$key) {
fputs($fp,"$text\r\n");

} else {

fputs($fp,$val);
}
}

fflush($fp);
flock ($fp,LOCK_UN);
fclose($fp);
}}}
}


//------------------ Функция подсветки кода -------------------------//
function highlight_code($code) {

$code = strtr($code,array('&#124;'=>'|','&lt;'=>'<','&gt;'=>'>','&amp;'=>'&','&#36;'=>'$','&quot;'=>'"','&#39;'=>"'",'&#92;'=>'`','&#37;'=>'%','&#94;'=>'^','&#58;'=>':','<br />'=>"\r\n"));

if(!strpos($code,'<?') && substr($code,0,2)!='<?') {$code="<?php\r\n".trim($code);}  

$code = highlight_string($code,true);

$code = strtr($code,array("\r\n"=>'<br />','|'=>'&#124;','$'=>'&#36;',"'"=>'&#39;','`'=>'&#92;','%'=>'&#37;','^'=>'&#94;',':'=>'&#58;'));

$code = '<div class="d">'.$code.'</div>';
return $code;
}

//------------------ Вспомогательная функция для bb-кода --------------------//
function url_replace($m) { 
if( !isset($m[3]) ) { 
return '<a href="' . $m[1] . '">' . $m[2] . '</a>'; 
} else { 
return '<a href="' . $m[3] . '">' . $m[3] . '</a>';         
}} 


//------------------ Функция вставки BB-кода --------------------//
function bb_code($message){ 
$message = preg_replace('#\[code\](.*?)\[/code\]#ie', 'highlight_code("\1")', $message); 
$message = preg_replace('#\[big\](.*?)\[/big\]#si', '<big>\1</big>', $message);
$message = preg_replace('#\[b\](.*?)\[/b\]#si', '<b>\1</b>', $message);
$message = preg_replace('#\[i\](.*?)\[/i\]#si', '<i>\1</i>', $message);
$message = preg_replace('#\[u\](.*?)\[/u\]#si', '<u>\1</u>', $message);
$message = preg_replace('#\[small\](.*?)\[/small\]#si', '<small>\1</small>', $message);
$message = preg_replace('#\[red\](.*?)\[/red\]#si', '<span style="color:#ff0000">\1</span>', $message);
$message = preg_replace('#\[green\](.*?)\[/green\]#si', '<span style="color:#00ff00">\1</span>', $message);
$message = preg_replace('#\[blue\](.*?)\[/blue\]#si', '<span style="color:#0000ff">\1</span>', $message);
$message = preg_replace('#\[yellow\](.*?)\[/yellow\]#si', '<span style="color:#ffff00">\1</span>', $message);
$message = preg_replace('#\[q\](.*?)\[/q\]#si', '<q>\1</q>', $message);
$message = preg_replace('#\[del\](.*?)\[/del\]#si', '<del>\1</del>', $message);
$message = preg_replace_callback('~\\[url=(http://.+?)\\](.+?)\\[/url\\]|(http://(www.)?[0-9a-z\.-]+\.[0-9a-z]{2,6}[0-9a-zA-Z/\?\.\~&amp;_=/%-:#]*)~', 'url_replace', $message); 
return $message;
}

//------------------ Функция перекодировки из UTF в WIN --------------------//
function utf_to_win($str) { 

if (function_exists('mb_convert_encoding')) return mb_convert_encoding($str, 'windows-1251', 'utf-8');
if (function_exists('iconv')) return iconv('utf-8', 'windows-1251', $str);

$utf8win1251 = array( 
"А"=>"\xC0","Б"=>"\xC1","В"=>"\xC2","Г"=>"\xC3","Д"=>"\xC4","Е"=>"\xC5","Ё"=>"\xA8","Ж"=>"\xC6","З"=>"\xC7","И"=>"\xC8","Й"=>"\xC9","К"=>"\xCA","Л"=>"\xCB","М"=>"\xCC",
"Н"=>"\xCD","О"=>"\xCE","П"=>"\xCF","Р"=>"\xD0","С"=>"\xD1","Т"=>"\xD2","У"=>"\xD3","Ф"=>"\xD4","Х"=>"\xD5","Ц"=>"\xD6","Ч"=>"\xD7","Ш"=>"\xD8","Щ"=>"\xD9","Ъ"=>"\xDA",
"Ы"=>"\xDB","Ь"=>"\xDC","Э"=>"\xDD","Ю"=>"\xDE","Я"=>"\xDF","а"=>"\xE0","б"=>"\xE1","в"=>"\xE2","г"=>"\xE3","д"=>"\xE4","е"=>"\xE5","ё"=>"\xB8","ж"=>"\xE6","з"=>"\xE7",
"и"=>"\xE8","й"=>"\xE9","к"=>"\xEA","л"=>"\xEB","м"=>"\xEC","н"=>"\xED","о"=>"\xEE","п"=>"\xEF","р"=>"\xF0","с"=>"\xF1","т"=>"\xF2","у"=>"\xF3","ф"=>"\xF4","х"=>"\xF5",
"ц"=>"\xF6","ч"=>"\xF7","ш"=>"\xF8","щ"=>"\xF9","ъ"=>"\xFA","ы"=>"\xFB","ь"=>"\xFC","э"=>"\xFD","ю"=>"\xFE","я"=>"\xFF"); 

return strtr($str, $utf8win1251); 
} 


//------------------ Функция перекодировки из WIN в UTF --------------------//
function win_to_utf($str) { 

if (function_exists('mb_convert_encoding')) return mb_convert_encoding($str, 'utf-8', 'windows-1251');
if (function_exists('iconv')) return iconv('windows-1251', 'utf-8', $str);

$win1251utf8 = array( 
"\xC0"=>"А","\xC1"=>"Б","\xC2"=>"В","\xC3"=>"Г","\xC4"=>"Д","\xC5"=>"Е","\xA8"=>"Ё","\xC6"=>"Ж","\xC7"=>"З","\xC8"=>"И","\xC9"=>"Й","\xCA"=>"К","\xCB"=>"Л","\xCC"=>"М",
"\xCD"=>"Н","\xCE"=>"О","\xCF"=>"П","\xD0"=>"Р","\xD1"=>"С","\xD2"=>"Т","\xD3"=>"У","\xD4"=>"Ф","\xD5"=>"Х","\xD6"=>"Ц","\xD7"=>"Ч","\xD8"=>"Ш","\xD9"=>"Щ","\xDA"=>"Ъ",
"\xDB"=>"Ы","\xDC"=>"Ь","\xDD"=>"Э","\xDE"=>"Ю","\xDF"=>"Я","\xE0"=>"а","\xE1"=>"б","\xE2"=>"в","\xE3"=>"г","\xE4"=>"д","\xE5"=>"е","\xB8"=>"ё","\xE6"=>"ж","\xE7"=>"з",
"\xE8"=>"и","\xE9"=>"й","\xEA"=>"к","\xEB"=>"л","\xEC"=>"м","\xED"=>"н","\xEE"=>"о","\xEF"=>"п","\xF0"=>"р","\xF1"=>"с","\xF2"=>"т","\xF3"=>"у","\xF4"=>"ф","\xF5"=>"х",
"\xF6"=>"ц","\xF7"=>"ч","\xF8"=>"ш","\xF9"=>"щ","\xFA"=>"ъ","\xFB"=>"ы","\xFC"=>"ь","\xFD"=>"э","\xFE"=>"ю","\xFF"=>"я"); 

return strtr($str, $win1251utf8); 
} 

//------------------ Функция преобразования в нижний регистр для UTF ------------------//
function rus_utf_tolower($str){

if (function_exists('mb_strtolower')) return mb_strtolower($str, 'utf-8');

$arraytolower = array( 'А'=>'а','Б'=>'б','В'=>'в','Г'=>'г','Д'=>'д','Е'=>'е','Ё'=>'ё','Ж'=>'ж','З'=>'з','И'=>'и','Й'=>'й','К'=>'к','Л'=>'л','М'=>'м','Н'=>'н','О'=>'о','П'=>'п','Р'=>'р','С'=>'с','Т'=>'т','У'=>'у','Ф'=>'ф','Х'=>'х','Ц'=>'ц','Ч'=>'ч','Ш'=>'ш','Щ'=>'щ','Ь'=>'ь','Ъ'=>'ъ','Ы'=>'ы','Э'=>'э','Ю'=>'ю','Я'=>'я',
'A'=>'a','B'=>'b','C'=>'c','D'=>'d','E'=>'e','I'=>'i','F'=>'f','G'=>'g','H'=>'h','J'=>'j','K'=>'k','L'=>'l','M'=>'m','N'=>'n','O'=>'o','P'=>'p','Q'=>'q','R'=>'r','S'=>'s','T'=>'t','U'=>'u','V'=>'v','W'=>'w','X'=>'x','Y'=>'y','Z'=>'z');

return strtr($str, $arraytolower); 
}


//------------------ Функция определения реального IP --------------------//
if (empty($_SESSION['user_ip'])){
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('|^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$|', $_SERVER['HTTP_X_FORWARDED_FOR'])){
$_SESSION['user_ip'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif(isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('|^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$|', $_SERVER['HTTP_CLIENT_IP'])) {
$_SESSION['user_ip'] = $_SERVER['HTTP_CLIENT_IP'];
} else {
$_SESSION['user_ip'] = $ip_addr;
}}

$ip = check($_SESSION['user_ip']);


//------------------ Функция определения реального браузера --------------------//
if (empty($_SESSION['user_brow'])){
if (isset($_SERVER['HTTP_X_OPERAMINI_PHONE_UA'])) {
$browsus = $_SERVER['HTTP_X_OPERAMINI_PHONE_UA'];
} elseif (isset($_SERVER['HTTP_USER_AGENT'])) {
$browsus = $_SERVER['HTTP_USER_AGENT'];
} else {
$browsus = 'Not_detected';
}
$browsus = preg_replace('|http://|i','', $browsus);
$browsus = strtok($browsus,'( ');
$_SESSION['user_brow'] = substr($browsus,0,22);
}

$brow = check($_SESSION['user_brow']);

//----------------------- Функция экранирования основных знаков --------------------------//
function check($msg){ 

if (is_array($msg)) {

foreach($msg as $key=>$val) {
$msg[$key] = check($val);
}

} else {
$msg = htmlspecialchars($msg); 
$search = array('|','\'','$','\\','^','%','`',"\0","\x00","\x1A");
$replace = array('&#124;','&#39;','&#36;','&#92;','&#94;','&#37;','&#96;','','','');

$msg = str_replace($search, $replace, $msg);
$msg = stripslashes(trim($msg));
}

return $msg;
}

//----------------------- Функция вырезания переноса строки --------------------------//
function no_br($msg, $replace = ""){ 
$msg = preg_replace ("|[\r\n]+|si", $replace, $msg);
return $msg;
}

//------------------- Функция замены и вывода смайлов -------------------//
function smiles($string){
global $config;
$string = str_replace(':','&#58;', $string);  
$string = preg_replace('|&#58;|',':', $string, $config['resmiles']); 

$arrsmiles = array();
$globsmiles = glob(BASEDIR."images/smiles/*.gif");
foreach ($globsmiles as $filename) {
$arrsmiles[] = basename($filename, '.gif');
}
rsort($arrsmiles);

foreach($arrsmiles as $smval){
$string = str_replace(":$smval",'<img src="'.BASEDIR.'images/smiles/'.$smval.'.gif" alt="image" /> ',$string);
}

if (is_admin(array(101,102,103,105))){

$admsmiles = array();
$globsmiles = glob(BASEDIR."images/smiles2/*.gif");
foreach ($globsmiles as $filename) {
$admsmiles[] = basename($filename, '.gif');
}
rsort($admsmiles);

foreach($admsmiles as $smvals){
$string=str_replace(":$smvals",'<img src="'.BASEDIR.'images/smiles2/'.$smvals.'.gif" alt="image" /> ',$string);
}}

return str_replace('&#58;',':',$string);  
}

//--------------- Функция обратной замены смайлов -------------------//
function nosmiles($string){
$string = preg_replace('|<img src="\.\./images/smiles/(.*?)\.gif" alt="image" />|',':$1', $string);
$string = preg_replace('|<img src="\.\./images/smiles2/(.*?)\.gif" alt="image" />|',':$1', $string);
return $string;  
}

//--------------- Функция подсчета файлов в загрузках -------------------//
function  count_dir($dir) { 

$count=0;
$newcount=0;

$path = opendir($dir);
while ($file = readdir($path)) {
if (( $file != ".")&&($file != "..")&&($file != ".htaccess")&&($file != "index.php")&&($file != "name.dat")&& !ereg (".txt$", "$file")&& !ereg (".JPG$", "$file")&& !ereg (".GIF$", "$file")) {
	
$count ++;

$filetime=filemtime("$dir/$file")+(3600*24*5);
if($filetime>SITETIME){	
$newcount ++;
}
}}

if($newcount>0){	
$input=(int)$count.'/+'.(int)$newcount; 
}else{
$input=(int)$count;
}

closedir ($path); 
return  $input;
}  


//--------------- Функция подсчета файлов в библиотеке -------------------//
 function  count_libdir($dir) { 

$count=0;
$newcount=0;

$path = opendir($dir);
while ($file = readdir($path)) {
if (ereg(".txt$", $file)){
	
$count ++;

$filetime=filemtime("$dir/$file")+(3600*24*5);
if($filetime>SITETIME){	
$newcount ++;
}
}}

if($newcount>0){	
$input=(int)$count.'/+'.(int)$newcount; 
}else{
$input=(int)$count;
}

closedir ($path); 
return  $input;
} 


//--------------- Функция правильного вывода веса файла -------------------//
function formatsize($file_size){

if ($file_size >= 1048576000){
$file_size = round(($file_size / 1073741824), 2) . " Gb";
} elseif (
$file_size >= 1024000){
$file_size = round(($file_size / 1048576), 2) . " Mb";
} elseif (
$file_size >= 1000){
$file_size = round(($file_size / 1024), 2) . " Kb";
} else {
$file_size = round($file_size) . " byte";}
return $file_size;
}

//--------------- Функция форматированного вывода размера файла -------------------//
function read_file($file){

if (file_exists($file)) {

return formatsize(filesize($file));

} else {
return 0;
}
}

//--------------- Функция подсчета веса директории -------------------//
function  read_dir($dir) { 

if (empty($allsize)){$allsize = 0;}

if ($path = opendir($dir)) {
while ($file_name = readdir($path)) {
if (($file_name!=='.') && ($file_name!=='..')){ 
if (is_dir($dir."/".$file_name)) {$allsize +=read_dir($dir."/".$file_name);} else { $allsize += filesize($dir."/".$file_name);} 
}} 
closedir ($path); 
}
return  $allsize;
} 

//--------------- Функция правильного вывода времени -------------------//
function formattime($file_time){

if($file_time >= 86400){
$file_time = 'суток: '.round((($file_time / 60) / 60) / 24, 1);
}elseif(
$file_time >= 3600){
$file_time = 'часов:  '.round(($file_time / 60) / 60, 1);
}elseif(
$file_time >= 60){
$file_time =  'минут: '.round($file_time / 60);
}else{
$file_time = 'секунд:  '.round($file_time);}
return $file_time;
}

//------------------ Функция антимата --------------------//
function antimat($string){
	      
$file = file(DATADIR."antimat.dat"); 

if (count($file)>0){
foreach($file as $value){

$data = explode("|",$value);

$string = preg_replace("|$data[0]|iu","***",$string); 
}}

return $string;
}

//------------------ Функция определения прав доступа (CHMOD) --------------------//
function permissions($filez){
$filez = decoct(fileperms($filez)) % 1000;
return $filez;
}

//------------------ Функция правильного вывода статуса --------------------//
function user_status($msg){ 
if($msg==101){$status='Господин';}
elseif($msg==102){$status='Администратор';}
elseif($msg==103){$status='Старший следящий';}
elseif($msg==105){$status='Следящий';}
else{$status='Юзер';}
return $status;
}	


//------------------ Функция выводящая картинку в загрузках --------------------//
function raiting_vote($string){ 	
if($string==0){$string=str_replace('0','<img src="../images/img/rating0.gif" alt="0"/>',$string);}
if($string>'0' && $string<='0.5'){ $string=str_replace($string,'<img src="../images/img/rating1.gif" alt="0.5"/>',$string); }
if($string>'0.5' && $string<='1'){ $string=str_replace($string,'<img src="../images/img/rating2.gif" alt="1"/>',$string); }   
if($string>'1' && $string<='1.5'){ $string=str_replace($string,'<img src="../images/img/rating3.gif" alt="1.5"/>',$string); }  
if($string>'1.5' && $string<='2'){ $string=str_replace($string,'<img src="../images/img/rating4.gif" alt="2"/>',$string); } 
if($string>'2' && $string<='2.5'){ $string=str_replace($string,'<img src="../images/img/rating5.gif" alt="2.5"/>',$string); } 
if($string>'2.5' && $string<='3'){ $string=str_replace($string,'<img src="../images/img/rating6.gif" alt="3"/>',$string); }  
if($string>'3' && $string<='3.5'){ $string=str_replace($string,'<img src="../images/img/rating7.gif" alt="3.5"/>',$string); }
if($string>'3.5' && $string<='4'){ $string=str_replace($string,'<img src="../images/img/rating8.gif" alt="4"/>',$string); }  
if($string>'4' && $string<='4.5'){ $string=str_replace($string,'<img src="../images/img/rating9.gif" alt="4.5"/>',$string); } 
if($string>'4.5' && $string<='5'){ $string=str_replace($string,'<img src="../images/img/rating10.gif" alt="5"/>',$string); }       
return $string;  }	


//--------------- Функция русского ника -------------------//
function nickname($string){
global $config;
if($config['includenick']==1){
if (file_exists(DATADIR."profil/$string.prof")){
$text = file_get_contents(DATADIR."profil/$string.prof"); 

$data = explode(":||:",$text);

if ($data[65]!="" && $data[36]>=150){

$string = $data[65];

}}}
return $string;  
}

//--------------- Вспомогательная функция антифлуда ------------------------//
function flooder($ip, $php_self){
global $config;

$old_db = file(DATADIR."flood.dat");
$new_db = fopen(DATADIR."flood.dat", "a+");
flock ($new_db,LOCK_EX);
ftruncate ($new_db,0);
$result = FALSE;

foreach($old_db as $old_db_line){
$old_db_arr = explode("|", $old_db_line);

if(($old_db_arr[0] + $config['floodstime']) > SITETIME ){
	
fputs ($new_db, $old_db_line);

if($old_db_arr[1] == $ip && $old_db_arr[2] == $php_self)
{ $result = TRUE; }}}

fflush($new_db);
flock ($new_db,LOCK_UN);
fclose($new_db);
return $result;
}

//------------------------- Функция антифлуда ------------------------------//
function antiflood($page){
global $config, $ip, $php_self;

if($config['floodstime'] > 0){
if(flooder($ip, $php_self) == TRUE ){header ($page); exit;}
$flood_file = fopen(DATADIR."flood.dat", "a+");
flock ($flood_file,LOCK_EX);
fputs ($flood_file, SITETIME.'|'.$ip.'|'.$php_self."|\r\n");
fflush($flood_file);
flock ($flood_file,LOCK_UN);
fclose($flood_file);   
}}

//------------------------- Функция карантина ------------------------------//
function karantin($usertime, $page){
global $config;

if($config['karantin'] > 0 && $usertime > 0){
if($usertime+$config['karantin']>SITETIME){header ($page); exit;}
}}


//------------------ Функция для обработки base64 --------------------//
function safe_encode($string) {
$data = base64_encode($string);
$data = str_replace(array('+','/','='),array('_','-',''),$data);
return $data;
}

function safe_decode($string) {
$string = str_replace(array('_','-'),array('+','/'),$string);
$data = base64_decode($string);
return $data;
}

//------------------ Функция шифрования по ключу --------------------//
function xoft_encode($string, $key){   
$result = "";   
for($i = 1; $i<=strlen($string); $i++){   
$char = substr($string, $i-1,1);   
$keychar = substr($key, ($i % strlen($key)) - 1, 1);   
$char = chr(ord($char)+ord($keychar));   
$result .= $char;   
}   
return safe_encode($result);   
}   

//------------------ Функция расшифровки по ключу --------------------//	
function xoft_decode($string, $key){  
$string = safe_decode($string); 
$result = "";   
for($i = 1; $i<=strlen($string); $i++){   
$char = substr( $string, $i - 1, 1 );   
$keychar = substr($key, ($i % strlen($key)) - 1, 1);   
$char = chr(ord($char) - ord($keychar));   
$result .= $char;   
}   
return $result;   
}   

//------------------ Функция генерирования паролей --------------------//
function generate_password($length=""){

if (empty($length)){$length = mt_rand(10,12);}	
$salt = str_split('aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789');

$makepass = "";
for ($i = 0; $i < $length; $i++){
$makepass .= $salt[array_rand($salt)];
}
return $makepass;
}

//------------------ Функция для читаемого вывода массива --------------------//
function text_dump($var, $level=0){ 
if(is_array($var)) $type="array[".count($var)."]";
else if(is_object($var)) $type="object";
else $type="";
if($type) {
echo $type.'<br />';
for(Reset($var),$level++; list($k,$v)=each($var);) {
if(is_array($v) && $k==="GLOBALS") continue;
for($i=0; $i<$level*3; $i++) echo ' ';
echo '<b>'.htmlspecialchars($k).'</b> => ', text_dump($v,$level);
}
}
else echo '"',htmlspecialchars($var),'"<br />';
}

function dump($var){ 
if((is_array($var)||is_object($var)) && count($var)){
echo '<pre>',text_dump($var),'</pre>';
}else{
echo '<tt>',text_dump($var),'</tt>';
}}

//------------------ Функция кодировки-раскодировки юникода --------------------//
$uniarray1=array('А','Б','В','Г','Д','Е','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я','а','б','в','г','д','е','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я','Ё','ё'); 

$uniarray2=array('&#1040;','&#1041;','&#1042;','&#1043;','&#1044;','&#1045;','&#1046;','&#1047;','&#1048;','&#1049;','&#1050;','&#1051;','&#1052;','&#1053;','&#1054;','&#1055;','&#1056;','&#1057;','&#1058;','&#1059;','&#1060;','&#1061;','&#1062;','&#1063;','&#1064;','&#1065;','&#1066;','&#1067;','&#1068;','&#1069;','&#1070;','&#1071;','&#1072;','&#1073;','&#1074;','&#1075;','&#1076;','&#1077;','&#1078;','&#1079;','&#1080;','&#1081;','&#1082;','&#1083;','&#1084;','&#1085;','&#1086;','&#1087;','&#1088;','&#1089;','&#1090;','&#1091;','&#1092;','&#1093;','&#1094;','&#1095;','&#1096;','&#1097;','&#1098;','&#1099;','&#1100;','&#1101;','&#1102;','&#1103;','&#1025;','&#1105;');


function unicode_encode($string){
global $uniarray1,$uniarray2;
$string=str_replace($uniarray1,$uniarray2,$string);
return $string;
};

function unicode_decode($string){
global $uniarray1,$uniarray2;
$string=str_replace($uniarray2,$uniarray1,$string);
return $string;
};

//------------------- Функция подсчета строк в файле--------------------//
function counter_string($files){

$count_lines=0;
if (file_exists($files)){
$lines = file($files);
$count_lines = count($lines);
}
return $count_lines;
}

//--------------- Функция листинга всех файлов и папок ---------------//
function scan_check($dirname){
global $arr, $config;

if (empty($arr['files'])){$arr['files'] = array();}
if (empty($arr['totalfiles'])){$arr['totalfiles'] = 0;}
if (empty($arr['totaldirs'])){$arr['totaldirs'] = 0;}

$no_check = explode(',',$config['nocheck']);

$dir = opendir($dirname);
while (($file = readdir($dir)) !== false){
if($file != "." && $file != ".."){
	
if(is_file($dirname.'/'.$file)){
	
$ext = strtolower(substr($file, strrpos($file, '.') + 1));

if (!in_array($ext, $no_check)){
$arr['files'][] = $dirname.'/'.$file.' - '.date_fixed(filemtime($dirname.'/'.$file), "j.m.y / H:i").' - '.formatsize(filesize($dirname.'/'.$file));
$arr['totalfiles']++;
}}

if(is_dir($dirname.'/'.$file)){
$arr['files'][] = $dirname.'/'.$file;
$arr['totaldirs']++;
scan_check($dirname.'/'.$file);

}}}

closedir($dir);

return $arr;
}

//--------------- Функция вывода календаря---------------//
function makeCal ($month, $year){
$wday = date("w", mktime(0,0,0,$month,1,$year));
if ($wday==0) {$wday=7;}
$n=-($wday-2);
$cal=array();
for ($y=0; $y<6; $y++) {
$row=array();
$notEmpty=false;
for ($x=0; $x<7; $x++, $n++) {
if (checkdate($month, $n, $year)) {
$row[]=$n;
$notEmpty=true;
} else {
$row[]="";
}}
if (!$notEmpty) break;
$cal[]=$row;
}
return $cal;
}

//--------------- Функция выключения графики ---------------//
/* function disable_img($image){
$image = nosmiles($image);
$image = preg_replace('|<img src="(.*?)" alt="image" /><br />|','', $image);
$image = preg_replace('|<img src="(.*?)" alt="image" />|','', $image);
return $image;
}  */

//--------------- Функция подсчета денег у юзера ---------------//
function user_many($login){

$prof_summ=0;
$bank_summ=0;

if (file_exists(DATADIR."profil/$login.prof")){
$text = file_get_contents(DATADIR."profil/$login.prof"); 
$data = explode(":||:",$text);
$prof_summ = (int)$data[41];
}

$string = search_string(DATADIR."bank.dat", $login, 1);
if ($string) {
$bank_summ = (int)$string[2];
}

return $prof_summ.'/'.$bank_summ;
}


//--------------- Функция подсчета денег в банке ---------------//
function user_bankmany($login){

$bank_summ = 0;

$string = search_string(DATADIR."bank.dat", $login, 1);
if ($string) {
$bank_summ = (int)$string[2];
}

return $bank_summ;
}

//--------------- Функция подсчета писем у юзера ---------------//
function user_mail($login){

$all_privat = counter_string(DATADIR."privat/$login.priv");

$new_privat = 0;

if (file_exists(DATADIR."profil/$login.prof")){
$text = file_get_contents(DATADIR."profil/$login.prof"); 
$data = explode(":||:",$text);
$new_privat = (int)$data[10];
}

return  $new_privat.'/'.$all_privat;
}


//--------------- Функция подсчета здоровья персонажа ---------------//
function user_health($login){

$health = 0;

if (file_exists(DATADIR."profil/$login.prof")){
$text = file_get_contents(DATADIR."profil/$login.prof"); 
$data = explode(":||:",$text);
$health = (int)$data[56].'%';
}

return $health;
}

//--------------- Функция подсчета выносливости персонажа ---------------//
function user_stamina($login){

$stamina = 0;

if (file_exists(DATADIR."profil/$login.prof")){
$text = file_get_contents(DATADIR."profil/$login.prof"); 
$data = explode(":||:",$text);
$stamina = (int)$data[57].'%';
}

return $stamina;
}

//--------------- Функция вывода аватара пользователя ---------------//
function user_avatars($login){
global $config;

if ($login==$config['guestsuser']){
return '<img src="'.BASEDIR.'images/avators/guest.gif" alt="image" /> ';
}

if(file_exists(DATADIR."profil/$login.prof")){
$text = file_get_contents(DATADIR."profil/$login.prof"); 
$data = explode(":||:",$text);

if($data[43]!=""){
return '<img src="'.BASEDIR.$data[43].'" alt="image" /> ';
}}

return '<img src="'.BASEDIR.'images/avators/noavatar.gif" alt="image" /> ';
}

//--------------- Функция подсчета карт в игре ---------------//
function cards_score($str){
if($str==1||$str==2||$str==3||$str==4){
$num = 6;
}
if($str==5||$str==6||$str==7||$str==8){
$num = 7;
}
if($str==9||$str==10||$str==11||$str==12){
$num = 8;
}                
if($str==13||$str==14||$str==15||$str==16){
$num = 9;
}                
if($str==17||$str==18||$str==19||$str==20){
$num = 10;
}                
if($str==21||$str==22||$str==23||$str==24){
$num = 2;
}                
if($str==25||$str==26||$str==27||$str==28){
$num = 3;
}                      
if($str==29||$str==30||$str==31||$str==32){
$num = 4;
}                      
if($str==33||$str==34||$str==35||$str==36){
$num = 11;
}                      
return $num;
}


//--------------- Функция подсчета очков в игре ---------------//
function cards_points($str){
$str=(int)$str;	
$points = ' очков';
if($str==2||$str==3||$str==4||$str==22||$str==23||$str==24|$str==32||$str==33||$str==34){$points = ' очка';}
if($str==21){$points = ' <b>очко!!!</b>';}
if($str==31){$points = ' очко';}
return $str.$points;
}


//--------------- Функция вывода статуса ---------------//
function user_ststuses($balls) {

$text = file_get_contents(DATADIR."status.dat"); 
if ($text!=""){
$udta = explode("|",$text);}
if($balls>=0 && $balls<5){$statuses=$udta[0];}
if($balls>=5 && $balls<10){$statuses=$udta[1];}	
if($balls>=10 && $balls<20){$statuses=$udta[2];}
if($balls>=20 && $balls<50){$statuses=$udta[3];}
if($balls>=50 && $balls<100){$statuses=$udta[4];}
if($balls>=100 && $balls<250){$statuses=$udta[5];}	
if($balls>=250 && $balls<500){$statuses=$udta[6];}
if($balls>=500 && $balls<750){$statuses=$udta[7];}
if($balls>=750 && $balls<1000){$statuses=$udta[8];}
if($balls>=1000 && $balls<1250){$statuses=$udta[9];}
if($balls>=1250 && $balls<1500){$statuses=$udta[10];}
if($balls>=1500 && $balls<1750){$statuses=$udta[11];}
if($balls>=1750 && $balls<2000){$statuses=$udta[12];}
if($balls>=2000 && $balls<2250){$statuses=$udta[13];}
if($balls>=2250 && $balls<2500){$statuses=$udta[14];}
if($balls>=2500 && $balls<2750){$statuses=$udta[15];}
if($balls>=2750 && $balls<3000){$statuses=$udta[16];}
if($balls>=3000 && $balls<3250){$statuses=$udta[17];}
if($balls>=3250 && $balls<3499){$statuses=$udta[18];}
if($balls>=3500 && $balls<4999){$statuses=$udta[19];}
if($balls>=5000 && $balls<7499){$statuses=$udta[20];}
if($balls>=7500 && $balls<9999){$statuses=$udta[21];}
if($balls>=10000){$statuses=$udta[22];}
$statuses=check($statuses);

return $statuses;
}


//--------------- Функция подсчета человек в контакт-листе ---------------//
function user_kontakt($login) {
return counter_string(DATADIR."datakontakt/$login.dat");
}

//--------------- Функция подсчета человек в игнор-листе ---------------//
function user_ignor($login) {
return counter_string(DATADIR."dataignor/$login.dat");
}

//--------------- Функция вывода количества зарегистрированных ---------------//
function stats_users() {
return counter_string(DATADIR.'datatmp/userlist.dat');
}

//--------------- Функция вывода количества админов и модеров --------------------//
function stats_admins() {
return counter_string(DATADIR.'datatmp/adminlist.dat');
}

//--------------- Функция вывода количества забаненных --------------------//
function stats_banned() {
return counter_string(DATADIR.'datatmp/banlist.dat');
}

//------------ Функция вывода количества ожидающих регистрации -----------//
function stats_reglist() {
return counter_string(DATADIR.'datatmp/reglist.dat');
}

//--------------- Функция вывода количества забаненных IP --------------------//
function stats_ipbanned() {
return counter_string(DATADIR.'ban.dat');
}

//--------------- Функция вывода количества фотографий --------------------//
function stats_gallery() {
return counter_string(DATADIR.'datagallery/fotobase.dat');
}

//--------------- Функция вывода количества новостей--------------------//
function stats_allnews() {
return counter_string(DATADIR.'news.dat');
}

//---------- Функция вывода количества запрещенных логинов ------------//
function stats_blacklogin() {
return counter_string(DATADIR.'blacklogin.dat');
}

//------------ Функция вывода количества запрещенных e-mail------------//
function stats_blackmail() {
return counter_string(DATADIR.'blackmail.dat');
}

//--------------- Функция вывода количества заголовков ----------------//
function stats_headlines() {
return counter_string(DATADIR.'headlines.dat');
}

//--------------- Функция вывода количества заголовков ----------------//
function stats_navigation() {
return counter_string(DATADIR.'navigation.dat');
}

//--------------- Функция вывода количества заголовков ----------------//
function stats_antimat() {
return counter_string(DATADIR.'antimat.dat');
}

//----------- Функция вывода даты последнего сканирования -------------//
function stats_checker() {

if (file_exists(DATADIR."datatmp/checker.dat")){

return date_fixed(filemtime(DATADIR."datatmp/checker.dat"), "j.m.y");

} else {
return 0;
}
}

//----------- Функция определения последней версии wap-motor ------------//
function stats_version() {

$info = 0;
$filtime = 0;

if (file_exists(DATADIR."datatmp/version.dat")){
$filtime = filemtime(DATADIR."datatmp/version.dat") + 86400;
$info = file_get_contents(DATADIR."datatmp/version.dat");
}

if (time() > $filtime){
if (copy("http://visavi.net/wap-motor/version.txt", DATADIR."datatmp/version.dat")){
chmod(DATADIR."datatmp/version.dat", 0666);
} else {
write_files(DATADIR."datatmp/version.dat", 0, 1, 0666);
}}

return $info; 

}

//----------------- Функция определения местонахождения -----------------//
function user_position($string) {

$position = 'Не определено';

if (file_exists(DATADIR."headlines.dat")){
$file = file(DATADIR."headlines.dat"); 

foreach($file as $value){
$line = explode("|",$value);

if ($string==$line[1]) {$position='<a href="'.BASEDIR.$line[1].'?'.SID.'">'.$line[2].'</a>'; break;}

}}

return $position;
}

//--------------- Функция автоустановки прав доступа ---------------//
function chmode ($path = ".") { 
if ($handle = opendir ($path)) { 

while (false !== ($file = readdir($handle))) { 

if ($file != "." && $file != "..") { 
$file_path = $path . "/" . $file; 

if (is_dir ($file_path)) { 
chmod ($file_path, 0777);
chmode ($file_path); 

} else { 
chmod ($file_path, 0666);
}}} 

closedir($handle); 
}} 


//--------------- Функция определение онлайн-статуса ---------------//
function user_online($login) {

$statwho='<span style="color:#ff0000">[Off]</span>';

if(file_exists(DATADIR."datalife/$login.dat")){
$lifefile = file_get_contents(DATADIR."datalife/$login.dat");
if ($lifefile!=""){

$lifestr = explode("|",$lifefile); 
$userlife = SITETIME - $lifestr[0];

if($userlife<600){
$statwho='<span style="color:#00ff00">[On]</span>';
}}}
return $statwho;
}

//---- Функция определение последнего посещения и местонахождения -----//
function user_visit($login, $where="") {

if (file_exists(DATADIR."datalife/$login.dat")){
$lifefile = file_get_contents(DATADIR."datalife/$login.dat");
if ($lifefile!=""){

$lifestr = explode("|",$lifefile); 
$userlife = SITETIME - $lifestr[0];

if($userlife<600){
$visit = '(Сейчас на сайте)';
$whereuser = user_position($lifestr[3]);
} else {
$visit = '(Последнее посещение '.date_fixed($lifestr[0]).')';
$whereuser = 'Оффлайн';
}
if($where=="") {return $visit;} else {return $whereuser;}
}} else {
return 'Оффлайн';
}}

//--------------- Функции сжатия страниц ---------------//
function compress_output_gzip($output) {
	return gzencode($output, 5);
} 

function compress_output_deflate($output) {
	return gzdeflate($output, 5);
}
 
//---------- Функция обработки строк данных и ссылок ---------//
function check_string($string) {
$string = strtolower($string);
$string = str_replace(array('http://www.','http://wap.','http://','https://'), '',$string);
$string = strtok($string,'/?');
return $string;
}

//---------- Функция определение должности юзера ---------//
function user_title($login) {

if(file_exists(DATADIR."profil/$login.prof")){
$text = file_get_contents(DATADIR."profil/$login.prof"); 

$data = explode(":||:",$text);
if($data[7]>=101 && $data[7]<=105){
if($data[7]==101){$title='<span style="color:#0000ff">[Старшой]</span>';}
if($data[7]==102){$title='<span style="color:#0000ff">[Админ]</span>';}
if($data[7]==103){$title='<span style="color:#ff8000">[Старший Модер]</span>';}
if($data[7]==105){$title='<span style="color:#ff8000">[Модер]</span>';}
return $title;
}}
}

//---------- Аналог функции substr для UTF-8 ---------//
function utf_substr($str, $offset, $length = null){

if (function_exists('mb_substr')) return mb_substr($str, $offset, $length, 'utf-8');
if (function_exists('iconv_substr')) return iconv_substr($str, $offset, $length, 'utf-8');

$str = utf_to_win($str);
$str = substr($str,$offset,$length);
return win_to_utf($str);
}



//---------------------- Аналог функции strlen для UTF-8 -----------------------//
function utf_strlen($str){
if (function_exists('mb_strlen')) return mb_strlen($str, 'utf-8');
if (function_exists('iconv_strlen')) return iconv_strlen($str, 'utf-8');
if (function_exists('utf8_decode')) return strlen(utf8_decode($str));
return strlen(utf_to_win($str));
} 


//---------- Аналог функции wordwrap для UTF-8 ---------//
function utf_wordwrap($str, $width=75, $break=' ', $cut=1){
$str = utf_to_win($str);
$str = wordwrap($str, $width, $break, $cut);
return win_to_utf($str);
}

//----------------------- Функция определения кодировки ------------------------//
function is_utf($str){
if (function_exists('mb_detect_encoding')){
if (mb_detect_encoding($str) == "UTF-8") {return true;} else { return false;}
}

$letters=array("а","б","в","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я");
foreach($letters as $letval){
if(strstr($str,$letval)){return true; break;} else { return false;}
}} 


//--------------------- Функция вырезания битых символов UTF -------------------//
function utf_badstrip($str) {
$ret = '';
for ($i = 0;$i < strlen($str);) {
$tmp = $str{$i++};
$ch = ord($tmp);
if ($ch > 0x7F) {
if ($ch < 0xC0) continue;
elseif ($ch < 0xE0) $di = 1;
elseif ($ch < 0xF0) $di = 2;
elseif ($ch < 0xF8) $di = 3;
elseif ($ch < 0xFC) $di = 4;
elseif ($ch < 0xFE) $di = 5;
else continue;

for ($j = 0;$j < $di;$j++) {
$tmp .= $ch = $str{$i + $j};
$ch = ord($ch);
if ($ch < 0x80 || $ch > 0xBF) continue 2;
}
$i += $di;
}
$ret .= $tmp;

}
return $ret;
}

//----------------------- Функция уникального ID по времени ------------------------//
function unitime() {

$microtime = explode(' ', microtime()); 

$unitime = $microtime[1].substr($microtime[0],2,2) ; 

return $unitime;
} 

//----------------------- Функция уникального ID по данным из файла ------------------------//
function unifile($file, $ceil) {

if (file_exists($file)){
if ($ceil!==""){

$arrdata = array(0);

$files = file($file);
foreach($files as $value){
$data = explode("|", $value);

if (isset($data[$ceil])){
$arrdata[] = (int)$data[$ceil];
}}

return max($arrdata) + 1;
}}

return 1;
}

//----------------------- Функция отправки письма по e-mail ------------------------//
function addmail($usermail, $subject, $msg, $mail="", $name="") {
global $config;

if($mail==""){$mail = $config['emails']; $name = $config['nickname'];}

$subject = utf_to_win($subject);
$msg = utf_to_win($msg);
$name = utf_to_win($name);

$subject = convert_cyr_string($subject, 'w','k');
$msg = convert_cyr_string($msg, 'w','k');
$name = convert_cyr_string($name, 'w','k');

$subject = '=?KOI8-R?B?'.base64_encode($subject).'?=';

$adds = "From: ".$name." <".$mail.">\n"; 
$adds .= "X-sender: ".$name." <".$mail.">\n";
$adds .= "Content-Type: text/plain; charset=koi8-r\n";   
$adds .= "MIME-Version: 1.0\n";
$adds .= "Content-Transfer-Encoding: 8bit\n";
$adds .= "X-Mailer: PHP v.".phpversion();

return mail($usermail,$subject,$msg,$adds);
}


//----------------------- Постраничная навигация (Переходы) ------------------------//
function page_jumpnavigation($link, $posts, $start, $total) {

echo '<hr />'; 
if ($start != 0) {echo '<a href="'.$link.'start='.($start - $posts).'&amp;'.SID.'">&lt;-Назад</a> ';}else{echo '&lt;-Назад';}
echo ' | '; 
if ($total > $start + $posts) {echo '<a href="'.$link.'start='.($start + $posts).'&amp;'.SID.'">Далее-&gt;</a>';}else{echo 'Далее-&gt;';}

}


//----------------------- Постраничная навигация (Страницы) ------------------------//
function page_strnavigation($link, $posts, $start, $total, $koll = 4) {

if($total>0){
$ba = ceil($total/$posts);
$ba2 = $ba * $posts - $posts;

echo '<hr />Страницы: ';
$min = $start - $posts * ($koll - 1);
$max = $start + $posts * $koll;

if ($min<$total && $min>0){
if ($min-$posts>0){
echo '<a href="'.$link.'start=0&amp;'.SID.'">1</a> ... ';
} else {
echo '<a href="'.$link.'start=0&amp;'.SID.'">1</a> ';
}}

for($i=$min; $i<$max;){

if ($i<$total && $i>=0){
$ii = floor(1 + $i / $posts);

if ($start==$i) {
echo ' <b>('.$ii.')</b> ';
} else {
echo ' <a href="'.$link.'start='.$i.'&amp;'.SID.'">'.$ii.'</a> ';
}}

$i=$i+$posts;}

if ($max<$total){
if ($max+$posts<$total){
echo ' ... <a href="'.$link.'start='.$ba2.'&amp;'.SID.'">'.$ba.'</a>';
} else {
echo ' <a href="'.$link.'start='.$ba2.'&amp;'.SID.'">'.$ba.'</a>';
}}
echo '<br />';
}}

//--------------------- Функция динамических заголовков ------------------------//
function site_title($string) {
global $config, $header_title;

$position = $config['title'];

if(file_exists(DATADIR."headlines.dat")){

$headlines = search_string(DATADIR."headlines.dat", $string, 1);
if ($headlines){$position.=' - '.$headlines[2];}}
if ($header_title) {$position.=' - '.$header_title;}

return $position;
}

//--------------------- Функция подсчета статистики ------------------------//
function statistics($number, $clear = false) {
if(isset($number)){

$number=(int)$number;

$file = file_get_contents(DATADIR."local.dat"); 
$u = explode("|",$file);

if ($clear===false) {$u[$number]++;} else {$u[$number] = $clear;}

$text = $u[0].'|'.$u[1].'|'.$u[2].'|'.$u[3].'|'.$u[4].'|'.$u[5].'|'.$u[6].'|'.$u[7].'|'.$u[8].'|'.$u[9].'|'.$u[10].'|';

if($text!="" && $u[$number]!==""){
$fp = fopen(DATADIR."local.dat","a+");
flock ($fp,LOCK_EX);
ftruncate ($fp,0);
fputs ($fp,$text);
fflush($fp);
flock ($fp,LOCK_UN);
fclose($fp);
unset($number);

}}}

//--------------------- Функция вывода статистики ------------------------//
function stats($number) {
if(isset($number)){
$file = file_get_contents(DATADIR."local.dat"); 
$data = explode("|",$file);
return (int)$data[$number];	
}}

//--------------------- Функция вывода статистики форума ------------------------//
function stats_forum() {
$file = file_get_contents(DATADIR."forum.dat"); 
$data = explode(":||:",$file);
return $data['1'].'/'.$data['2'].'/'.$data['3'];
}

//--------------------- Функция шифровки Email-адреса ------------------------//
function crypt_mail($mail) {   
$output = "";
$strlen = strlen($mail); 
for ($i = 0; $i < $strlen; $i++) { 
$output .= '&#'.ord($mail[$i]).';'; 
}    
return $output;    
}  

//------------------ Функция проверки ячейки строки в файле ------------------//
function search_string($file, $str, $ceil) {   

if (file_exists($file)){
$files = file($file);

foreach($files as $key=>$value){
$data = explode("|", $value);

if ($data[$ceil]==$str){
$data['line'] = $key;
return $data; break;
}}}

return false;
}

//------------------ Функция чтения строки в файле ------------------//
function read_string($file, $line="") {   

if (file_exists($file)){
$files = file($file);

if ($line===""){
return explode("|",end($files));
}

if (isset($files[$line])){
return explode("|",$files[$line]);
}
}
return false;
}

//------------------ Аналог функции scandir для PHP4 ------------------//
function scandirs($dir, $sortorder = 0) {   
if (is_dir($dir)) {
if (function_exists('scandir')) { 
$files = scandir($dir, $sortorder);
return $files;
}

$dirlist = opendir($dir);
$files = array();  
while(($file = readdir($dirlist)) !== false) {   
$files[] = $file; }   
closedir($dirlist);   
if ($sortorder == 0){ sort($files); } else { rsort($files); }
return $files;   

} else { return false; }   
}   
 
//------------------- Функция обработки массива (int) --------------------//
function intar($string){

if (is_array($string)){
$newstring = array_map('intval', $string);
} else {
$newstring = (int)$string;
}

return $newstring;
}

//------------------------ Функция записи в файл ------------------------//
function write_files($filename, $text, $clear=0, $chmod=""){
$fp = fopen($filename, "a+");
flock ($fp,LOCK_EX);
if ($clear==1) {ftruncate($fp,0);}  
fputs ($fp,$text);
fflush($fp);
flock ($fp,LOCK_UN);
fclose($fp);
if ($chmod!="") {chmod($filename, $chmod);}
}

//------------------- Функция подсчета голосований --------------------//
function stats_votes(){
$sum = 0;
if (file_exists(DATADIR."datavotes/result.dat")){
$vresult = file(DATADIR."datavotes/result.dat");
$vr = explode("|",$vresult[0]);
if($vresult){
$sum = array_sum($vr);
}}
return (int)$sum;
}

//------------------- Функция подсчета объявлений --------------------//
function stats_board(){
$itogoboards = 0;
if (file_exists(DATADIR."databoard/database.dat")){
$file = file(DATADIR."databoard/database.dat");
foreach($file as $bval){
$dtb=explode("|", $bval);
if(file_exists(DATADIR."databoard/$dtb[2].dat")){
$total = counter_string(DATADIR."databoard/$dtb[2].dat");
$itogoboards+=$total;
}}}
return (int)$itogoboards;
}

//------------------- Функция показа даты последней новости --------------------//
function stats_news(){

$file = file(DATADIR."news.dat");
$data = explode("|",end($file));

if (isset($data[3])){
$newdate = date_fixed($data[3], "d.m.y");
if ($newdate=='Сегодня'){$newdate = '<span style="color:#ff0000">Сегодня</span>';}
} else {
$newdate = 0;
}

return $newdate;
}

//------------------- Функция вывода последних новостей --------------------//
function last_news(){
global $config;

if ($config['lastnews']>0){

$file = file(DATADIR."news.dat");
$file = array_reverse($file);
$count = count($file);

if ($config['lastnews']>$count){$config['lastnews'] = count;}

for ($i=0; $i<$config['lastnews']; $i++){

$dt = explode("|",$file[$i]);

echo '<br /><img src="'.BASEDIR.'images/img/news.gif" alt="image" /> <b>'.$dt[0].'</b> ('.date_fixed($dt[3],"d.m.y").')<br />';

echo bb_code($dt[1]).'<br /><a href="'.BASEDIR.'news/komm.php?id='.(int)$dt[5].'&amp;'.SID.'">Комментарии</a> ';

$totalkomm = counter_string(DATADIR."datakomm/$dt[5].dat");

echo '('.(int)$totalkomm.')';
}}
}

//------------------- Функция присоединения идентификатора --------------------//
function verifi($link){

if(strpos($link, '?')===false){

return $link.'?'.SID;
} else {
return $link.'&'.SID;
}
}

//------------------------- Функция stripos для php4 ------------------------//
if(!function_exists("stripos")){
function stripos($str, $needle, $offset = 0){
return strpos(strtolower($str), strtolower($needle), $offset);
}
}

//------------------------- Функция вывода пользовательских тегов ------------------------//
function quickcode(){
echo 'BB-код<br />';
echo '<a href="#form" onclick="javascript:tag(\'[url=]\', \'[/url]\');"><img src="'.BASEDIR.'images/editor/a.gif" alt="image" /></a>';
echo '<a href="#form" onclick="javascript:tag(\'[b]\', \'[/b]\');"><img src="'.BASEDIR.'images/editor/b.gif" alt="image" /></a>';
echo '<a href="#form" onclick="javascript:tag(\'[big]\', \'[/big]\');"><img src="'.BASEDIR.'images/editor/big.gif" alt="image" /></a>';
echo '<a href="#form" onclick="javascript:tag(\'[small]\', \'[/small]\');"><img src="'.BASEDIR.'images/editor/small.gif" alt="image" /></a>';
echo '<a href="#form" onclick="javascript:tag(\'[i]\', \'[/i]\');"><img src="'.BASEDIR.'images/editor/i.gif" alt="image" /></a>'; 
echo '<a href="#form" onclick="javascript:tag(\'[u]\', \'[/u]\');"><img src="'.BASEDIR.'images/editor/u.gif" alt="image" /></a>'; 
echo '<a href="#form" onclick="javascript:tag(\'[q]\', \'[/q]\');"><img src="'.BASEDIR.'images/editor/q.gif" alt="image" /></a>';
echo '<a href="#form" onclick="javascript:tag(\'[del]\', \'[/del]\');"><img src="'.BASEDIR.'images/editor/del.gif" alt="image" /></a>';
echo '<a href="#form" onclick="javascript:tag(\'[code]\', \'[/code]\');"><img src="'.BASEDIR.'images/editor/code.gif" alt="image" /></a>'; 

echo '<a href="#form" onclick="javascript:tag(\'[red]\', \'[/red]\');"><img src="'.BASEDIR.'images/editor/red.gif" alt="image" /></a>'; 
echo '<a href="#form" onclick="javascript:tag(\'[green]\', \'[/green]\');"><img src="'.BASEDIR.'images/editor/green.gif" alt="image" /></a>'; 
echo '<a href="#form" onclick="javascript:tag(\'[blue]\', \'[/blue]\');"><img src="'.BASEDIR.'images/editor/blue.gif" alt="image" /></a>'; 
echo '<a href="#form" onclick="javascript:tag(\'[yellow]\', \'[/yellow]\');"><img src="'.BASEDIR.'images/editor/yellow.gif" alt="image" /></a>';  
echo '<br />';
}

//------------------------- Функция вывода админских тегов ------------------------//
function quicktags(){
echo 'Быстрые теги <br />';	
echo '<a href="#form" onclick="javascript:tag(\'&lt;a href=&quot;&quot;&gt;\', \'&lt;/a&gt;\');"><img src="'.BASEDIR.'images/editor/a.gif" alt="image" /></a>';
echo '<a href="#form" onclick="javascript:tag(\'&lt;img src=&quot;\', \'&quot; alt=&quot;image&quot; /&gt;\');"><img src="'.BASEDIR.'images/editor/img.gif" alt="image" /></a>';
echo '<a href="#form" onclick="javascript:tag(\'&lt;br /&gt;\', \'\');"><img src="'.BASEDIR.'images/editor/br.gif" alt="image" /></a>';
echo '<a href="#form" onclick="javascript:tag(\'&lt;hr /&gt;\', \'\');"><img src="'.BASEDIR.'images/editor/hr.gif" alt="image" /></a>';
echo '<a href="#form" onclick="javascript:tag(\'&lt;b&gt;\', \'&lt;/b&gt;\');"><img src="'.BASEDIR.'images/editor/b.gif" alt="image" /></a>';
echo '<a href="#form" onclick="javascript:tag(\'&lt;big&gt;\', \'&lt;/big&gt;\');"><img src="'.BASEDIR.'images/editor/big.gif" alt="image" /></a>';
echo '<a href="#form" onclick="javascript:tag(\'&lt;small&gt;\', \'&lt;/small&gt;\');"><img src="'.BASEDIR.'images/editor/small.gif" alt="image" /></a>';
echo '<a href="#form" onclick="javascript:tag(\'&lt;i&gt;\', \'&lt;/i&gt;\');"><img src="'.BASEDIR.'images/editor/i.gif" alt="image" /></a>'; 
echo '<a href="#form" onclick="javascript:tag(\'&lt;u&gt;\', \'&lt;/u&gt;\');"><img src="'.BASEDIR.'images/editor/u.gif" alt="image" /></a>'; 
echo '<a href="#form" onclick="javascript:tag(\'&lt;div style=&quot;text-align:left&quot;&gt;\', \'&lt;/div&gt;\');"><img src="'.BASEDIR.'images/editor/left.gif" alt="image" /></a>';
echo '<a href="#form" onclick="javascript:tag(\'&lt;div style=&quot;text-align:center&quot;&gt;\', \'&lt;/div&gt;\');"><img src="'.BASEDIR.'images/editor/center.gif" alt="image" /></a>'; 
echo '<a href="#form" onclick="javascript:tag(\'&lt;div style=&quot;text-align:right&quot;&gt;\', \'&lt;/div&gt;\');"><img src="'.BASEDIR.'images/editor/right.gif" alt="image" /></a>';
echo '<a href="#form" onclick="javascript:tag(\'&lt;span style=&quot;color:#ff0000&quot;&gt;\', \'&lt;/span&gt;\');"><img src="'.BASEDIR.'images/editor/red.gif" alt="image" /></a>'; 
echo '<a href="#form" onclick="javascript:tag(\'&lt;span style=&quot;color:#00ff00&quot;&gt;\', \'&lt;/span&gt;\');"><img src="'.BASEDIR.'images/editor/green.gif" alt="image" /></a>'; 
echo '<a href="#form" onclick="javascript:tag(\'&lt;span style=&quot;color:#0000ff&quot;&gt;\', \'&lt;/span&gt;\');"><img src="'.BASEDIR.'images/editor/blue.gif" alt="image" /></a>'; 
echo '<a href="#form" onclick="javascript:tag(\'&lt;span style=&quot;color:#ffff00&quot;&gt;\', \'&lt;/span&gt;\');"><img src="'.BASEDIR.'images/editor/yellow.gif" alt="image" /></a>'; 
echo '<br />';
}


//------------------------- Функция вывода быстрых смайлов ------------------------//
function quicksmiles(){
echo 'Смайлы<br />';	
echo '<a href="#form" onclick="javascript:tag(\' :) \', \'\');"><img src="'.BASEDIR.'images/smiles/).gif" alt="image" /></a> ';
echo '<a href="#form" onclick="javascript:tag(\' :( \', \'\');"><img src="'.BASEDIR.'images/smiles/(.gif" alt="image" /></a> ';
echo '<a href="#form" onclick="javascript:tag(\' :D \', \'\');"><img src="'.BASEDIR.'images/smiles/D.gif" alt="image" /></a> ';
echo '<a href="#form" onclick="javascript:tag(\' :E \', \'\');"><img src="'.BASEDIR.'images/smiles/E.gif" alt="image" /></a> ';
echo '<a href="#form" onclick="javascript:tag(\' :hello \', \'\');"><img src="'.BASEDIR.'images/smiles/hello.gif" alt="image" /></a> ';
echo '<a href="#form" onclick="javascript:tag(\' :cry \', \'\');"><img src="'.BASEDIR.'images/smiles/cry.gif" alt="image" /></a> ';
echo '<a href="#form" onclick="javascript:tag(\' :obana \', \'\');"><img src="'.BASEDIR.'images/smiles/obana.gif" alt="image" /></a> ';
echo '<a href="#form" onclick="javascript:tag(\' :infat \', \'\');"><img src="'.BASEDIR.'images/smiles/infat.gif" alt="image" /></a> ';
echo '<a href="#form" onclick="javascript:tag(\' :krut \', \'\');"><img src="'.BASEDIR.'images/smiles/krut.gif" alt="image" /></a> ';
echo '<a href="#form" onclick="javascript:tag(\' :vtopku \', \'\');"><img src="'.BASEDIR.'images/smiles/vtopku.gif" alt="image" /></a> ';
echo '<br />';
}


//------------------------- Вспомогательная функция быстрой вставки  ------------------------//
function quickpaste($form){

echo '<script language="JavaScript" type="text/javascript">
function tag(text1, text2) { 
if ((document.selection)) { 
document.form.'.$form.'.focus(); 
document.form.document.selection.createRange().text = text1+document.form.document.selection.createRange().text+text2; 
} else if(document.forms[\'form\'].elements[\''.$form.'\'].selectionStart!=undefined) { 
var element = document.forms[\'form\'].elements[\''.$form.'\']; 
var str = element.value; 
var start = element.selectionStart; 
var length = element.selectionEnd - element.selectionStart; 
element.value = str.substr(0, start) + text1 + str.substr(start, length) + text2 + str.substr(start + length); 
} else document.form.'.$form.'.value += text1+text2; 
}	
</script>';
}

//----------------------- Функция изменения настроек сайта -------------------//
function change_setting($str){
global $config;

$file = file_get_contents(DATADIR."config.dat"); 
$data = explode('|',$file);

$text = "";
for ($u=0; $u<$config['configkeys']; $u++){
if (isset($str[$u])){$data[$u] = $str[$u];}
$text.=$data[$u].'|';
}

if($data[8]!="" && $data[9]!="" && $text!=""){
$fp=fopen(DATADIR."config.dat","a+");    
flock($fp,LOCK_EX);           
ftruncate($fp,0);                                                                
fputs($fp,$text);
fflush($fp);
flock($fp,LOCK_UN);
fclose($fp);  
unset($text); 
}
}

//------------------------- Функция записи в профиль  ------------------------//
function change_profil($login, $str){
global $config;

if (file_exists(DATADIR."profil/$login.prof")){

$file = file_get_contents(DATADIR."profil/$login.prof"); 
$data = explode(':||:', $file);

$text = "";
for ($u=0; $u<$config['userprofkey']; $u++){
if (isset($str[$u])){$data[$u] = $str[$u];}
$text.=$data[$u].':||:';
}

if($data[0]!="" && $data[1]!="" && $data[4]!="" && $text!=""){
$fp=fopen(DATADIR."profil/$login.prof","a+");
flock($fp,LOCK_EX);   
ftruncate($fp,0);                                                                 
fputs($fp,$text);
fflush($fp);
flock($fp,LOCK_UN);
fclose($fp);  
unset($text);
}}
}

//------------------------- Функция чтения из профиля  ------------------------//
function reading_profil($login){

$arrdata = array();

if (file_exists(DATADIR."profil/$login.prof")){

$file = file_get_contents(DATADIR."profil/$login.prof");
if ($file!=""){ 
$arrdata = explode(':||:', $file);
}}

return $arrdata;
}

//------------------------- Функция проверки авторизации  ------------------------//
function is_user(){

if ($_SESSION['log']!="" && $_SESSION['par']!=""){
if (file_exists(DATADIR.'profil/'.$_SESSION['log'].'.prof')){
$file = file_get_contents(DATADIR.'profil/'.$_SESSION['log'].'.prof');
$data = explode(':||:', $file);

if ($_SESSION['log']==$data[0] && md5(md5($_SESSION['par']))==$data[1]){

return true;
}}}
return false;
}


//------------------------- Функция проверки администрации  ------------------------//
function is_admin($access){

if ($_SESSION['log']!="" && $_SESSION['par']!=""){
if (file_exists(DATADIR.'profil/'.$_SESSION['log'].'.prof')){

$file = file_get_contents(DATADIR.'profil/'.$_SESSION['log'].'.prof');
$data = explode(':||:', $file);

if ($_SESSION['log']==$data[0] && md5(md5($_SESSION['par']))==$data[1]){
if (in_array($data[7], $access)){

return true;
}}}}
return false;
}


//------------------------- Функция добавления копирайта в изображение ------------------------//
function copyright_image($file){

if (file_exists($file)){
$ext = getimagesize($file); 

if ($ext[2]==1){

$img = imagecreatefromgif($file); 
$copy = imagecreatefromgif(BASEDIR.'images/img/copyright.gif');
imagecopy($img, $copy, imagesx($img)-imagesx($copy), imagesy($img)-imagesy($copy), 0, 0, imagesx($copy), imagesy($copy));
imagegif($img, $file);
imagedestroy($img);

} else if ($ext[2]==2){

$img = imagecreatefromjpeg($file); 
$copy = imagecreatefromgif(BASEDIR.'images/img/copyright.gif');
imagecopy($img, $copy, imagesx($img)-imagesx($copy), imagesy($img)-imagesy($copy), 0, 0, imagesx($copy), imagesy($copy));
imagejpeg ($img, $file);
imagedestroy($img);

}
return true;  
}}

//------------------------- Функция вывода заголовков ------------------------//
function show_title($image, $title){
echo '<img src="'.BASEDIR.'images/img/'.$image.'" alt="image" /> <b>'.$title.'</b><br /><br />';  
}

//------------------------- Функция вывода ошибок ------------------------//
function show_error($error){
echo '<br><img src="'.BASEDIR.'images/img/error.gif" alt="image" /> <b>'.$error.'</b><br />';
}

//------------------------- Функция вывода предупреждения ------------------------//
function show_login($notice){
echo '<div class="login">'.$notice.'<br /><b><a href="'.BASEDIR.'pages/login.php?'.SID.'">Авторизоваться</a></b> или в начале ';
echo '<b><a href="'.BASEDIR.'pages/registration.php?'.SID.'">Зарегистрироваться</a></b></div>';
}
?>