<?php 
 
/** 
* KChat - 
* Author Ganesh Kandu 
* Contact [email protected]  
*/ 
 
if(file_exists("config/db.php")){ 
    $data['db'] = include "config/db.php"; 
    $opt = array( 
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION, 
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
        PDO::ATTR_EMULATE_PREPARES   => false, 
        PDO::MYSQL_ATTR_FOUND_ROWS => TRUE 
    ); 
    $data['pdo'] = new PDO("mysql:host=".$data['db']['db_host'].";dbname=".$data['db']['db_db'].";port=".$data['db']['db_port'].";charset=utf8", $data['db']['db_user'], $data['db']['db_pass'],$opt); 
} 
 
function _rand($len){ 
    $result = ""; 
    $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    $charArray = str_split($chars); 
    for($i = 0; $i < $len; $i++){ 
        $randItem = array_rand($charArray); 
        $result .= "".$charArray[$randItem]; 
    } 
    return $result; 
} 
 
function fcreate($file,$data){ 
    $fnf = explode("/",$file); 
    $file = end($fnf); 
    unset($fnf[count($fnf)-1]); 
    $folders = ""; 
    foreach($fnf as $fols){ 
        $folders .= $fols; 
        if(!is_dir($folders)){ 
            mkdir($folders); 
        } 
        $folders .= "/"; 
    } 
    return file_put_contents($folders.$file,$data); 
} 
 
function isAjax(){ 
    $header = isset($_SERVER['HTTP_X_REQUESTED_WITH']) ? $_SERVER['HTTP_X_REQUESTED_WITH'] : null; 
    return ($header === 'XMLHttpRequest'); 
} 
 
function makefile($data,$src,$trg,$x){ 
    $xn = array(); 
    foreach($x as $key => $value){ 
        $xn['{{'.$key.'}}'] = $value; 
    } 
    $file = file_get_contents($data['config']['path']."/kchat/make/".$src); 
    $file = strtr($file,$xn); 
    fcreate($data['config']['path'].'/'.$trg,$file); 
} 
 
function js($data,$src,$trg){ 
    if(!file_exists($data['config']['path'].'/'.$trg)){ 
        $src .= '.js'; 
        $x = array( 
            'url' => $data['config']['url'], 
        ); 
        makefile($data,$src,$trg,$x); 
    } 
    return $data['config']['url']."/".$trg; 
} 
 
function css($data,$src,$trg){ 
    if(!file_exists($data['config']['path'].'/'.$trg)){ 
        $src .= '.css'; 
        $x = array( 
            'url' => $data['config']['url'], 
        ); 
        makefile($data,$src,$trg,$x); 
    } 
    return $data['config']['url']."/".$trg; 
} 
 
function CheckValid($pass,$hash){ 
     
    if($pass == $hash){ 
        return true; 
    } 
    return false; 
} 
 
function cactive($active,$name){ 
    if($active == $name){ 
        return" class=\"active\" "; 
    } 
} 
 
function db($no){ 
    $bin = array(); 
    while(floor($no) > 0){ 
        $bin[] = $no%2; 
        $no = $no/2; 
    } 
    return $bin; 
} 
 
function status($no,$tm){ 
    $bin = db($no);     
    if(!isset($bin[$tm])){ 
        $bin[0] = 0; 
    } 
    $dec = 0; 
    $i = 0; 
    $res = array(); 
    foreach($bin as $b){ 
        $res[] = $b; 
        $dec += $b*pow(2,$i); 
        $i++; 
    } 
    if(!isset($bin[$tm])){ 
        $bin[$tm] = 0; 
    } 
    if($bin[$tm] == 0){ 
        $dec += pow(2,$tm); 
    }else{ 
        $dec -= pow(2,$tm); 
    } 
    return $dec; 
} 
 
function get_status($no,$tm){ 
    $bin = db($no); 
    if(isset($bin[$tm])){ 
        return $bin[$tm]; 
    }else{ 
        return 0; 
    } 
} 
 
function status_in($len,$no){ 
    $last = 0; 
    $size = $len - 1; 
    while($size >= 0){ 
        $last += pow(2,$size); 
        $size--; 
    } 
    $numbers = 0; 
    $nos = array(); 
    while($last >= $numbers){ 
        $arr = db($numbers); 
        if(get_status($numbers,$no) == 0){ 
            $nos[] = $numbers; 
        } 
        $numbers++; 
    } 
    return $nos; 
} 
 
function ago($datetime, $full = false){ 
     
    $now = new DateTime(); 
    $ago = new DateTime($datetime); 
    $diff = $now->diff($ago); 
 
    $diff->w = floor($diff->d / 7); 
    $diff->d -= $diff->w * 7; 
 
    $string = array( 
        'y' => 'year', 
        'm' => 'month', 
        'w' => 'week', 
        'd' => 'day', 
        'h' => 'hour', 
        'i' => 'minute', 
        's' => 'second', 
    ); 
    foreach ($string as $k => &$v) { 
        if ($diff->$k) { 
            $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : ''); 
        } else { 
            unset($string[$k]); 
        } 
    } 
    if (!$full) $string = array_slice($string, 0, 1); 
    return $string ? implode(', ', $string) . ' ago' : 'just now'; 
} 
 
function getip(){ 
    $ipaddress = ''; 
    if (getenv('HTTP_CLIENT_IP')) 
        $ipaddress = getenv('HTTP_CLIENT_IP'); 
    else if(getenv('HTTP_X_FORWARDED_FOR')) 
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR'); 
    else if(getenv('HTTP_X_FORWARDED')) 
        $ipaddress = getenv('HTTP_X_FORWARDED'); 
    else if(getenv('HTTP_FORWARDED_FOR')) 
        $ipaddress = getenv('HTTP_FORWARDED_FOR'); 
    else if(getenv('HTTP_FORWARDED')) 
        $ipaddress = getenv('HTTP_FORWARDED'); 
    else if(getenv('REMOTE_ADDR')) 
        $ipaddress = getenv('REMOTE_ADDR'); 
    else 
        $ipaddress = 'UNKNOWN'; 
  
    return $ipaddress; 
} 
 
function reverse($a){ 
    $b = array(); 
    for($i = count($a) - 1;$i >= 0 ; $i--){ 
        $b[] = $a[$i]; 
    } 
    return $b; 
} 
 
function msgencode($data,$txt){ 
    return trim(json_encode($txt),'"'); 
} 
 
function msgdecode($data,$txt){ 
    return json_decode('"'.$txt.'"', 1); 
} 
 
function menu($data,$key,$value){ 
    $id = ""; 
    if(isset($value['id'])){ 
        $id = "id=\"".$value['id']."\""; 
    } 
    if(!isset($value['active'])){ 
        $value['active'] = "****"; 
    } 
    echo "<li ".cactive($value['active'],$data['active'])." >"; 
        echo "<a href=\"".$value['url']."\" ".$id." >"; 
            echo "<span class=\"".$value['glyphicon']."\"></span>"; 
            echo $key; 
        echo "</a>"; 
    echo "</li>"; 
} 
 
function submenu($data,$key,$value){ 
    $id = "submenuid".rand(10000,99999); 
    echo  "<li class=\"panel panel-default\" id=\"dropdown\">"; 
        echo  "<a data-toggle=\"collapse\" href=\"#".$id."\">"; 
            echo  "<span class=\"".$value['glyphicon']."\"></span>"; 
            echo  "".$key.""; 
            echo  "<span class=\"caret\"></span>"; 
        echo  "</a>"; 
        echo  "<div id=\"".$id."\" class=\"panel-collapse collapse\">"; 
            echo  "<div class=\"panel-body\">"; 
                echo  "<ul class=\"nav navbar-nav\">"; 
                    sitebar($data,$value['submenu']); 
                echo "</ul>"; 
            echo  "</div>"; 
        echo  "</div>"; 
    echo  "</li>"; 
} 
 
function sitebar($data,$sitebar){ 
    foreach($sitebar as $key => $value){ 
        if(isset($value['menu'])){ 
            menu($data,$key,$value); 
        }else{ 
            submenu($data,$key,$value); 
        } 
    } 
} 
 
function strchunk($txt,$len = 20){ 
    $i = 0; 
    $chunk = array(); 
    while(substr($txt,$i*$len,$len)){ 
        $chunk[] = substr($txt,$i*$len,$len); 
        $i++; 
    } 
    return $chunk; 
} 
 
function getGroup($data){ 
    if(isset($data['param'][0])){ 
        return base64_decode(urldecode($data['param'][0])); 
    }else{ 
        return 'NO_GROUP'; 
    } 
} 
 
function getBrowser(){ 
    if(!empty($_SERVER['HTTP_USER_AGENT'])){ 
        return $_SERVER['HTTP_USER_AGENT']; 
    }else{ 
        return false; 
    } 
} 
     
function k_random($n){ 
    $char = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    $result = ''; 
    while($n > 0){ 
        $result .= $char[rand(0,61)]; 
        $n--; 
    } 
    return $result; 
} 
 
function base($n,$bf,$bt){ 
    $char = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    $result = ''; 
    $offset = 0; 
    while($n != 0){ 
        if(($n % $bt) < 0){ 
            $offset = - ($n % $bt); 
        }else{ 
            $offset = ($n % $bt); 
        } 
        $result = $char[$offset].$result; 
        $n = floor($n/$bt); 
    } 
    return ($result); 
} 
 
function kchat_rand(){ 
    return base((round(microtime(true) * 10000) . rand(100,999)),10,62); 
} 
 
function isReq($id){ 
    if(isset($_POST['req'][$id])){ 
        if($_POST['req'][$id] == 'true'){ 
            return true; 
        } 
    } 
    return false; 
} 
 
function reqps($data){ 
    $ser = @unserialize(@file_get_contents('cache/reqps.temp')); 
    if($data['reqps'] > $ser['s']){ 
        @file_put_contents('cache/reqps.cache',$ser[1 - $data['reqps']%2]); 
    } 
    if(isset($ser[$data['reqps']%2])){ 
        ++$ser[$data['reqps']%2]; 
    } 
    $ser[1 - $data['reqps']%2] = 0; 
    $ser['s'] = $data['reqps']; 
    $req = @serialize($ser); 
    @file_put_contents('cache/reqps.temp',$req); 
} 
 
function psql($string,$data) { 
    $indexed=$data==array_values($data); 
    foreach($data as $k=>$v) { 
        if(is_string($v)) $v="'$v'"; 
        if($indexed) $string=preg_replace('/\?/',$v,$string,1); 
        else $string=str_replace(":$k",$v,$string); 
    } 
    return $string; 
} 
 
function nextQuery($fp) { 
    $sql=""; 
    while ($line = fgets($fp, 40960)) { 
        $line = trim($line); 
        if (strlen($line)>1) { 
            if ($line[0]=="-" && $line[1]=="-") { 
                continue; 
            } 
        } 
        $sql.=$line.chr(13).chr(10); 
        if (strlen($line)>0){ 
            if ($line[strlen($line)-1]==";"){ 
                break; 
            } 
        } 
    } 
    return $sql; 
} 
 
function presql($data,$sql){ 
    return str_replace("%dbprefix%",$data['db']['db_prefix'],$sql); 
} 
 
function cclear(){ 
    $file = 'cache/.kchat'; 
    if(!file_exists($file)){ 
        file_put_contents($file,''); 
    } 
    if((time() - @filemtime($file)) > 3){ 
        touch($file); 
        return true; 
    }else{ 
        return false; 
    } 
} 
 
function set_notification($data,$not,$url = '#'){ 
    if(isset($data['user']['id'])){ 
        $user = $data['user']['id']; 
    } 
    if(isset($data['Admin'])){ 
        $user = $data['Admin']; 
    } 
    $db_prefix = $data['db']['db_prefix']; 
    $stmt = $data['pdo']->prepare("INSERT INTO `{$db_prefix}notification` (`url`,`notification`,`user`) VALUES (:url,:not,:user)"); 
    $stmt->execute( 
        array( 
            'url' => $url, 
            'not' => $not, 
            'user' => $user 
        ) 
    ); 
} 
 
function __end(){ 
    $txt = "YWxlcnRpZnkuYWxlcnQoJzxjZW50ZXI+RG9uYXRlPGJyLz5HYW5lc2ggS2FuZHU8YnIvPjxhIGhyZWY9XCJodHRwczovL3d3dy5wYXlwYWwubWUvR2FuZXNoS2FuZHVcIiBUQVJHRVQ9XCJfQkxBTktcIiA+RG9uYXRlPC9hPjwvY2VudGVyPicpOw=="; 
    $file = 'cache/~~kchat'; 
    if(!file_exists($file)){ 
        file_put_contents($file,''); 
    } 
    if((time() - @filemtime($file)) > 1296000){ 
        touch($file); 
        echo base64_decode($txt); 
    }else{ 
        echo ''; 
    } 
} 
 
function is_ip4($ip){ 
    if(count(explode('.',$ip)) != 4){ 
        return false; 
    } 
    return true; 
} 
 
 |