*/ /* * File: /_inc/library.php * Description: * Functions for, well, all sorts of odd stuff. */ //require_once("{$GLOBALS['level']}_inc/modules/library_debug.php"); require_once("{$GLOBALS['level']}_inc/modules/library_login.php"); require_once("{$GLOBALS['level']}_inc/modules/library_image.php"); require_once("{$GLOBALS['level']}_inc/modules/library_ban.php"); require_once("{$GLOBALS['level']}_inc/modules/library_reader.php"); require_once("{$GLOBALS['level']}_inc/modules/library_console.php"); require_once("{$GLOBALS['level']}_inc/modules/library_userlist.php"); require_once("{$GLOBALS['level']}_inc/modules/library_prettyparse.php"); require_once("{$GLOBALS['level']}_inc/modules/library_cookies.php"); //require_once("{$GLOBALS['level']}_inc/modules/library_namegen.php"); require_once("{$GLOBALS['level']}_inc/modules/library_registration.php"); function Mystify_IP($ip) { $ip = explode('.', $ip); foreach($ip as $a => $b) { $ip[$a] = substr(md5('>'.$a.'>'.$b.'>'), ($a*4)+2, 4); } return implode('.', $ip); } function Mystify_Host($host) { $host = explode('.', $host); if (count($host) > 4) return '*.'.implode('.', array_splice($host, -4)); else if (count($host) > 3) return '*.'.implode('.', array_splice($host, -3)); return implode('.', array_splice($host, -3)); //return preg_replace('/.*([0-9a-z]{1,64}\.[-0-9a-z]{1,64}\.[a-z]{2,3})/i','\1',$host); } function PChoose($p1=NULL, $p2=NULL, $p3=NULL, $p4=NULL, $p5=NULL) { return (!empty($p1) ? $p1 : (!empty($p2) ? $p2 : (!empty($p3) ? $p3 : (!empty($p4) ? $p4 : $p5)))); } function GetFile($file) { if (file_exists($file)) return file_get_contents($file); else return ''; } function GetChatSymbols($id=0, $reset=false) { if ($id == 0) $id = $GLOBALS['id']; MMC_Lock("Chat.Symbol.{$id}"); if ($reset) { MMC_Unset("Chat.Symbol.{$id}"); $GLOBALS['symbols'] = array(); } else { $GLOBALS['symbols'] = MMC_Get("Chat.Symbol.{$id}"); } if (!is_array($GLOBALS['symbols'])) { $GLOBALS['symbols'] = array(); $rez = SQL_SingleQuery("SELECT id,prefix,suffix,name,flags FROM {$GLOBALS['sql_prefix']}symbols WHERE (chat={$id} OR chat=0)", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); for($i=0;$i<$num;$i++) { $row = SQL_FetchAssoc($rez, $i); $GLOBALS['symbols'][$row['id']] = $row; } SQL_FreeResult($rez); if (empty($GLOBALS['symbols']) || (count($GLOBALS['symbols']) == 1)) { $GLOBALS['symbols'][1] = array( 'prefix' => '* ', 'suffix' => '', 'name' => 'Member', 'flags' => '1', 'id' => 1 ); $GLOBALS['symbols'][2] = array( 'prefix' => '^ ', 'suffix' => '', 'name' => 'Moderator', 'flags' => 'MmCZ', 'id' => 2 ); $GLOBALS['symbols'][3] = array( 'prefix' => '+ ', 'suffix' => '', 'name' => 'Admin', 'flags' => 'Mm', 'id' => 3 ); } MMC_Set("Chat.Symbol.{$id}", $GLOBALS['symbols']); } ksort($GLOBALS['symbols']); MMC_Unlock("Chat.Symbol.{$id}"); } function GetChatStates($id=0, $reset=false) { if ($id == 0) $id = $GLOBALS['id']; MMC_Lock("Chat.States.{$id}"); if ($reset) { MMC_Unset("Chat.States.{$id}"); $GLOBALS['states'] = array(); } else { $GLOBALS['states'] = MMC_Get("Chat.States.{$id}"); } if (!is_array($GLOBALS['states'])) { $GLOBALS['states'] = array(); $rez = SQL_SingleQuery("SELECT id,prefix,suffix,name FROM {$GLOBALS['sql_prefix']}userstates WHERE (chat={$id} OR chat=0)", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); for($i=0;$i<$num;$i++) { $row = SQL_FetchAssoc($rez, $i); $GLOBALS['states'][$row['id']] = $row; } SQL_FreeResult($rez); MMC_Set("Chat.States.{$id}", $GLOBALS['states']); } ksort($GLOBALS['states']); MMC_Unlock("Chat.States.{$id}"); } function GetChatReplaces($id=0, $reset=false) { if ($id == 0) $id = $GLOBALS['id']; MMC_Lock("Chat.Replace.{$id}"); if ($reset) { MMC_Unset("Chat.Replace.{$id}"); unset($GLOBALS['replaces']); } else { $GLOBALS['replaces'] = MMC_Get("Chat.Replace.{$id}"); } if (!is_array($GLOBALS['replaces'])) { $GLOBALS['replaces'] = array(); $GLOBALS['replaces']['find'] = array(); $GLOBALS['replaces']['repl'] = array(); $GLOBALS['replaces']['raw'] = array(); $rez = SQL_SingleQuery("SELECT id,afind,arepl,preg,raw FROM {$GLOBALS['sql_prefix']}replaces WHERE (chat={$id} OR chat=0) ORDER BY id ASC", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); for($i=0;$i<$num;$i++) { $row = SQL_FetchAssoc($rez, $i); if ($row['raw'] == t) { $GLOBALS['replaces']['raw'][$row['id']] = strtolower($row['afind']); } else { $GLOBALS['replaces']['find'][$row['id']] = array( 'str' => $row['afind'], 'regex' => ($row['preg']=='t') ); } $GLOBALS['replaces']['repl'][$row['id']] = $row['arepl']; } SQL_FreeResult($rez); MMC_Set("Chat.Replace.{$id}", $GLOBALS['replaces']); } MMC_Unlock("Chat.Replace.{$id}"); } function GetChatChannels($id=0, $reset=false) { if ($id == 0) $id = $GLOBALS['id']; MMC_Lock("Chat.Chan.{$id}"); if ($reset) { MMC_Unset("Chat.Chan.{$id}"); $GLOBALS['chan'] = array(); } else { $GLOBALS['chan'] = MMC_Get("Chat.Chan.{$id}"); } if (empty($GLOBALS['chan'])) { $GLOBALS['chan'] = array(); $rez = SQL_SingleQuery("SELECT id,name,read_access,write_access FROM {$GLOBALS['sql_prefix']}channels WHERE (chat={$id} OR chat=0) ORDER BY id ASC", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); for($i=0;$i<$num;$i++) { $row = SQL_FetchAssoc($rez, $i); $GLOBALS['chan'][] = array( 'id' => $row['id'], 'read_access' => $row['read_access'], 'write_access' => $row['write_access'], 'name' => $row['name'] ); } SQL_FreeResult($rez); MMC_Set("Chat.Chan.{$id}", $GLOBALS['chan']); } MMC_Unlock("Chat.Chan.{$id}"); } function GetChatIcons($id=0, $reset=false) { if ($id == 0) $id = $GLOBALS['id']; MMC_Lock("Icon.{$id}"); if ($reset) { MMC_Unset("Icon.{$id}"); $GLOBALS['icons'] = array(); } else { $GLOBALS['icons'] = MMC_Get("Icon.{$id}"); } if (empty($GLOBALS['icons'])) { $GLOBALS['icons'] = array(); $GLOBALS['icons']['reg'] = array(); $GLOBALS['icons']['pub'] = array(); $GLOBALS['icons']['user'] = array(); $GLOBALS['icons']['faction'] = array(); $id = SQL_EscapeString($id)+0; $rez = SQL_SingleQuery("SELECT id,suficon,preicon,pub,name,userid,faction FROM {$GLOBALS['sql_prefix']}icons WHERE (chat=$id OR chat=0)", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); for($i=0;$i<$num;$i++) { $row = SQL_FetchAssoc($rez, $i); if (!empty($row['faction'])) $GLOBALS['icons']['faction'][] = $row; else if (!empty($row['userid'])) $GLOBALS['icons']['user'][] = $row; else if ($row['pub'] == 't') $GLOBALS['icons']['pub'][] = $row; else $GLOBALS['icons']['reg'][] = $row; } SQL_FreeResult($rez); MMC_Set("Icon.{$id}", $GLOBALS['icons']); } MMC_Unlock("Icon.{$id}"); } function GetLastMsg($id=0, $reset=false) { if (empty($id)) $id = $GLOBALS['id']; if (empty($id)) return false; MMC_Lock("LastMsg.{$id}"); if ($reset) { MMC_Unset("LastMsg.{$id}"); $GLOBALS['lastmsg'] = ''; } else { $GLOBALS['lastmsg'] = MMC_Get("LastMsg.{$id}"); } if (empty($GLOBALS['lastmsg'])) { $id = SQL_EscapeString($id); $utimezone = PChoose($_SESSION['chats'][$id]['timezone'], $_SESSION['chats'][0]['timezone'], $GLOBALS['chat']['form_timezone']); $rez = SQL_SingleQuery("SELECT to_char(timezone(COALESCE(form_timezone,'{$utimezone}'), lastmsg), COALESCE(form_lastmsg,'{$GLOBALS['settings']['lastmsg']}')) as lastmsg FROM {$GLOBALS['sql_prefix']}chats WHERE id=$id", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); if (SQL_NumRows($rez) > 0) { $row = SQL_FetchAssoc($rez); $GLOBALS['lastmsg'] = $row['lastmsg']; } else { die('No such chat!'); } SQL_FreeResult($rez); MMC_Set("LastMsg.{$id}", $GLOBALS['lastmsg']); } MMC_Unlock("LastMsg.{$id}"); } function GetChatPrefs($id=0, $reset=false) { if (empty($id)) $id = PChoose($GLOBALS['id'], $_REQUEST['chatid'])+0; if (empty($id)) return FALSE; MMC_Lock("Chat.{$id}"); GetChatSettings($id); if ($reset) { MMC_Unset("Chat.{$id}"); $GLOBALS['chat'] = array(); } else { $GLOBALS['chat'] = MMC_Get("Chat.{$id}"); } if (empty($GLOBALS['chat'])) { $id = SQL_EscapeString($id)+0; $rez = SQL_SingleQuery( "SELECT COALESCE(s_logolink, '{$GLOBALS['settings']['logolink']}') as s_logolink, COALESCE(s_logo, '{$GLOBALS['settings']['logo']}') as s_logo, COALESCE(s_css, '{$GLOBALS['settings']['css']}') as s_css, COALESCE(s_motd, '{$GLOBALS['settings']['motd']}') as s_motd, COALESCE(s_welcome_page, '{$GLOBALS['settings']['welcomepage']}') as s_welcome_page, read_access,write_access,parent,theme, COALESCE(s_defaulthandle, '{$GLOBALS['settings']['nohandle']}') as s_defaulthandle, COALESCE(s_chatlines, {$GLOBALS['settings']['chatlines']}) as s_chatlines, COALESCE(s_postlines, {$GLOBALS['settings']['postlines']}) as s_postlines, COALESCE(s_postlength, {$GLOBALS['settings']['postlength']}) as s_postlength, COALESCE(s_identlength, {$GLOBALS['settings']['identlength']}) as s_identlength, COALESCE(s_maxhandle, {$GLOBALS['settings']['maxhandle']}) as s_maxhandle, COALESCE(timeout, {$GLOBALS['settings']['usertimeout']}) as timeout, id,path,flags,title,prefs, COALESCE(form_timezone, '{$GLOBALS['settings']['timezone']}') as form_timezone, COALESCE(form_lastpost,'{$GLOBALS['settings']['lastpost']}') as form_lastpost FROM {$GLOBALS['sql_prefix']}chats WHERE id=$id", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__ ); if (SQL_NumRows($rez) > 0) { $row = SQL_FetchAssoc($rez); foreach($row as $key => $val) { if (($key == 's_postlength') && ($val < $GLOBALS['chat_postlen_min'])) $val = $GLOBALS['chat_postlen_min']; else if (($key == 's_postlength') && ($val > $GLOBALS['chat_postlen_max'])) $val = $GLOBALS['chat_postlen_max']; else if (($key == 'timeout') && ($val < 5)) $val = 5; $GLOBALS['chat'][$key] = $val; } if (!empty($GLOBALS['chat']['form_timezone'])) $GLOBALS['chat']['form_timezone'] = TZ2DST($GLOBALS['chat']['form_timezone']); } else { die('No such chat!'); } SQL_FreeResult($rez); if (CheckFlags($GLOBALS['chat']['flags'], 'R')) { $GLOBALS['chat']['read_access'] .= '1'; $GLOBALS['chat']['write_access'] .= '1'; } else if (CheckFlags($GLOBALS['chat']['flags'], 'r')) { $GLOBALS['chat']['write_access'] .= '1'; } MMC_Set("Chat.{$id}", $GLOBALS['chat']); } GetChatReplaces($id, $reset); GetChatChannels($id, $reset); GetChatIcons($id, $reset); GetChatSymbols($id, $reset); GetChatStates($id, $reset); GetChatImagebans($id, $reset); GetLastMsg($id,true); MMC_Unlock("Chat.{$id}"); } function GetChatPrefsPath($path='', $reset=false) { MMC_Lock("Chat.p{$path}"); if ($reset) MMC_Unset("Chat.p{$path}"); $GLOBALS['404id'] = MMC_Get("Chat.p{$path}"); if (empty($GLOBALS['404id'])) { $path = SQL_EscapeString($path); $rez = SQL_SingleQuery("SELECT id,path FROM {$GLOBALS['sql_prefix']}chats WHERE path='{$path}'", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); if (SQL_NumRows($rez) > 0) { $row = SQL_FetchAssoc($rez); foreach($row as $key => $val) $GLOBALS['404id'][$key] = $val; } else { MMC_Unlock("Chat.p{$path}"); return false; } SQL_FreeResult($rez); MMC_Set("Chat.p{$path}", $GLOBALS['404id']); } $GLOBALS['id'] = $GLOBALS['404id']['id']; MMC_Unlock("Chat.p{$path}"); return true; } function CheckEmail($email) { return eregi('^[a-z0-9]+([_.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+\\.[a-z]{2,4}$', $email); } function CheckFlags($aflag, $flags='') { if ($aflag == '*') $aflag = $_SESSION['chats'][0]['flags'].$_SESSION['chats'][$GLOBALS['id']]['flags']; if (strlen($flags) == 1) return (strpos($aflag, $flags) !== false); return preg_match("@[{$flags}]@", $aflag); } function AnyFlags($chat=0) { if (empty($chat)) $chat = $GLOBALS['id']+0; $flags = $_SESSION['chats'][0]['flags'].$_SESSION['chats'][$chat]['flags']; return !empty($flags); } function ArrayOccurance($arr, $key, $match) { $cnt = 0; $count = count($arr); for ($cc=0;$cc<$count;$cc++) { if ($arr[$cc][$key] == $match) $cnt++; } return $cnt; } function ArrayFind($arr, $key, $match) { $cnt = count($arr); for ($cc=0;$cc<$cnt;$cc++) { if ($arr[$cc][$key] == $match) return $cc+1; } return 0; } function SendPrivateMsg($to, $topic, $msg, $from=0) { if ((strlen($topic) < 1) || (strlen($msg) < 1)) return -1; if (!$from) $from = $_SESSION['chats'][$GLOBALS['id']]['id'] ? $_SESSION['chats'][$GLOBALS['id']]['id'] : $_SESSION['chats'][0]['id']; $from = SQL_EscapeString($from); $to = SQL_EscapeString($to); $realto = $to; $rez = SQL_SingleQuery("SELECT id,parent FROM {$GLOBALS['sql_prefix']}users WHERE id={$to}", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $row = SQL_FetchAssoc($rez); SQL_FreeResult($rez); if ($row['parent'] > 0) { $to = $row['parent']; $realto = $row['id']; } if ($GLOBALS['use_zlib'] != TRUE) $msg = SQL_EscapeString($msg); else $msg = SQL_EscapeString(gzcompress($msg, 9)); $topic = SQL_EscapeString($topic); SQL_EmptyQuery("INSERT INTO {$GLOBALS['sql_prefix']}messages (recipient,author,post,realrecp,topic) VALUES ({$to},{$from},'{$msg}',{$realto},'{$topic}')", __FILE__.' : '.__LINE__.' : '.__FUNCTION__); } function CheckMemberOfChat($chat=0) { if ($chat == 0) $chat = $GLOBALS['id']; if ($_SESSION['chats'][$chat]['id']) { return $_SESSION['chats'][$chat]['id']; } if (!CheckFlags($GLOBALS['chat']['flags'], 'G')) { if ($_SESSION['chats'][0]['id']) { return $_SESSION['chats'][0]['id']; } } return FALSE; } function CheckNameExists($name='', $id=0) { $name = SQL_EscapeString($name); $id = SQL_EscapeString($id)+0; $rez = SQL_Query("DELETE FROM {$GLOBALS['sql_prefix']}users WHERE created<(now() - interval '72 hours') AND verified!='yes'", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $rez = SQL_SingleQuery("SELECT id FROM {$GLOBALS['sql_prefix']}users WHERE username='{$name}' AND chat={$id}", $rez, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); SQL_FreeResult($rez); return ($num > 0); } function HeaderNoCache() { header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', false); header('Pragma: no-cache'); } function HeaderCache($time=7200) { header('Expires: '.gmdate('D, d M Y H:i:s', time()+$time).' GMT'); header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); header('Cache-Control: public'); header('Pragma: cache'); } function LookupIP2Country($ip) { $ip = SQL_EscapeString($ip); $res = array('Unknown', 'XX', 'XXX'); $rez = SQL_SingleQuery("SELECT cname.name,cname.name2,cname.name3 FROM {$GLOBALS['sql_prefix']}country_ips as cip JOIN {$GLOBALS['sql_prefix']}country_names as cname ON (cip.country=cname.id) WHERE '{$ip}'::inet >= cip.range_start AND '{$ip}'::inet <= cip.range_end", $GLOBALS['sql_hand'], __FILE__.' : '.__LINE__.' : '.__FUNCTION__); if (SQL_NumRows($rez) == 1) { $res = SQL_FetchAssoc($rez); } SQL_FreeResult($rez); return $res; } function UTF8Entities($str) { return htmlentities($str, ENT_COMPAT, 'UTF-8'); } function GetChatsOwnedBy($user=0, $parent=0) { if (empty($user)) $user = $_SESSION['chats'][0]['id']; if (empty($user)) return FALSE; if (empty($parent)) $parent = $_SESSION['chats'][0]['parent']+0; $chats = array(); //$rez = SQL_SingleQuery("SELECT DISTINCT mchats.id,mchats.title,COALESCE((CASE WHEN chats.owner=users.id THEN 'M' WHEN chats.owner=users.parent THEN 'M' END), assoc.flags) as flags FROM {$GLOBALS['sql_prefix']}chats as mchats JOIN {$GLOBALS['sql_prefix']}chats as chats ON chats.id>0 AND mchats.id>0 AND (chats.id=mchats.parent OR chats.id=mchats.id) JOIN {$GLOBALS['sql_prefix']}userassoc as assoc ON (chats.id=assoc.chat OR assoc.chat=0) AND (assoc.flags!='1' AND assoc.flags IS NOT NULL) JOIN {$GLOBALS['sql_prefix']}users as users ON (assoc.id=users.id OR assoc.id=users.parent OR chats.owner=users.id OR chats.owner=users.parent) AND (users.id={$user} OR users.parent={$user} OR users.parent={$parent} OR users.id={$parent})", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $rez = SQL_SingleQuery("SELECT DISTINCT id,title,flags FROM {$GLOBALS['sql_prefix']}ownedchats WHERE (uid={$user} OR parent={$user} OR parent={$parent} OR uid={$parent})", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); for($i=0;$i<$num;$i++) { $row = SQL_FetchAssoc($rez, $i); $chats[$row['id']] = $row; } SQL_FreeResult($rez); usort($chats, 'SortAccessFlags'); return $chats; } function GetNamesOwnedBy($user=0, $parent=0, $reset=false) { if (empty($user)) $user = PChoose($_SESSION['chats'][0]['id'], $_SESSION['chats'][$GLOBALS['id']]['id'])+0; if (empty($user)) return FALSE; if (empty($parent)) $parent = PChoose($_SESSION['chats'][0]['parent'], $_SESSION['chats'][$GLOBALS['id']]['parent'])+0; $names = array(); if ($reset || ($_SESSION['storage']['names']['last'] < time()-300)) { $rez = SQL_SingleQuery("SELECT users.chat,users.id,users.username FROM {$GLOBALS['sql_prefix']}users as users WHERE users.id={$user} OR users.parent={$parent} OR users.parent={$user} OR users.id={$parent} ORDER BY users.username ASC", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); for($i=0;$i<$num;$i++) { $row = SQL_FetchAssoc($rez, $i); $names[] = $row; } SQL_FreeResult($rez); $_SESSION['storage']['names']['data'] = $names; $_SESSION['storage']['names']['last'] = time(); } else { $names = $_SESSION['storage']['names']['data']; } return $names; } function WildcardToSQL($str) { $find = array( '%', '_', '*', '?' ); $repl = array( '\%', '\_', '%', '_' ); return str_replace($find, $repl, $str); } function SQLToWildcard($str) { $find = array( '\%', '\_', '%', '_' ); $repl = array( '%', '_', '*', '?' ); return FiniteReplace($find, $repl, $str); } function WildcardToPreg($str, $delim='@') { $find = array( '\*', '\?' ); $repl = array( '.*', '.' ); return str_replace($find, $repl, preg_quote($str, $delim)); } function FiniteReplaceHelper($find, $repl, $match) { foreach($find as $key => $val) { if (is_array($val) && ($val['regex'] == TRUE)) { if (preg_match('@'.str_replace('@', '\@', $val['str']).'@iu', $match)) return preg_replace('@'.str_replace('@', '\@', $val['str']).'@iu', $repl[$key], $match); } else if (strcasecmp( (is_array($val) ? $val['str'] : $val) , $match) == 0) { return $repl[$key]; } } return ''; } function FiniteReplace($find, $repl, $subj) { $xfind = array(); // Temp array foreach ($find as $key => $val) { if (is_array($val) && ($val['regex'] == TRUE)) $xfind[$key] = '('.str_replace('@', '\@', $val['str']).')'; else $xfind[$key] = '('.preg_quote( (is_array($val) ? $val['str'] : $val) , '@').')'; } $pattern = '('.implode('|', $xfind).')'; unset($xfind); return preg_replace('@'.$pattern.'@iseu', 'FiniteReplaceHelper($find, $repl, "\\1")', $subj); } function SortAccessFlags($a, $b) { $af = ''; $bf = ''; if (!is_array($a) && !is_array($b)) { $af = $a; $bf = $b; } else { $af = $a['flags']; $bf = $b['flags']; } if (CheckFlags($af, 'M') && CheckFlags($bf, 'M')) return 0; else if (CheckFlags($af, 'M') && !CheckFlags($bf, 'M')) return 1; else if (!CheckFlags($af, 'M') && CheckFlags($bf, 'M')) return -1; else if (CheckFlags($af, 'm') && CheckFlags($bf, 'm')) return 0; else if (CheckFlags($af, 'm') && !CheckFlags($bf, 'm')) return 1; else if (!CheckFlags($af, 'm') && CheckFlags($bf, 'm')) return -1; else if (CheckFlags($af, 'Z') && CheckFlags($bf, 'Z')) return 0; else if (CheckFlags($af, 'Z') && !CheckFlags($bf, 'Z')) return 1; else if (!CheckFlags($af, 'Z') && CheckFlags($bf, 'Z')) return -1; return strcmp($af, $bf); } function TZ2DST($tz) { $oe = error_reporting(E_ALL ^ E_NOTICE); require_once('Date.php'); $dt = new Date(); $dt->setTZ($tz); error_reporting($oe); if ($dt->inDaylightTime()) return $dt->tz->dstshortname; return $dt->tz->shortname; } /* function named2hex($col) { if (!((strlen($col)==6) && preg_match('/[0-9a-f]+/i', $col))) { require_once('Image/Color.php'); $color = new Image_Color(); $ref = $color->namedColor2RGB($ref); } } */ function ColorBrightness($r, $g, $b) { return (($r*299) + ($g*587) + ($b*114))/1000; } function ColorDifference($r1, $g1, $b1, $r2, $g2, $b2) { return (max($r1,$r2)-min($r1,$r2)) + (max($g1,$g2)-min($g1,$g2)) + (max($b1,$b2)-min($b1,$b2)); } function ColorFixContrast($ref, $test, $bright=75, $diff=250) { $oe = error_reporting(E_ALL ^ E_NOTICE); require_once('Image/Color.php'); if ($bright > 100) $bright = 100; else if ($bright < 0) $bright = 0; if ($diff > 300) $diff = 300; else if ($diff < 0) $diff = 0; $color = new Image_Color(); if ($ref[0] == '#') $ref = substr($ref, 1); if ($test[0] == '#') $test = substr($test, 1); if (!((strlen($ref)==6) && preg_match('/[0-9a-f]+/i', $ref))) $ref = $color->namedColor2RGB($ref); else $ref = $color->hex2rgb($ref); if (!((strlen($test)==6) && preg_match('/[0-9a-f]+/i', $test))) $test = $color->namedColor2RGB($test); else $test = $color->hex2rgb($test); $org = $test; for($i=0 ; (abs(ColorBrightness($ref[0], $ref[1], $ref[2]) - ColorBrightness($test[0], $test[1], $test[2])) < $bright) || (ColorDifference($ref[0], $ref[1], $ref[2], $test[0], $test[1], $test[2]) < $diff) ; $i++ ) { if ($i%2==0) { $test[0] = $org[0] + ($org[0]+1)*0.1*($i/2); $test[1] = $org[1] + ($org[1]+1)*0.1*($i/2); $test[2] = $org[2] + ($org[2]+1)*0.1*($i/2); } else { $test[0] = $org[0] - ($org[0]+1)*0.1*(($i-1)/2); $test[1] = $org[1] - ($org[1]+1)*0.1*(($i-1)/2); $test[2] = $org[2] - ($org[2]+1)*0.1*(($i-1)/2); } if ($test[0] > 255) $test[0] = 255; else if ($test[0] < 0) $test[0] = 0; if ($test[1] > 255) $test[1] = 255; else if ($test[1] < 0) $test[1] = 0; if ($test[2] > 255) $test[2] = 255; else if ($test[2] < 0) $test[2] = 0; } error_reporting($oe); return $color->rgb2hex($test); } function GetFlagsForChat($chat=0) { if (empty($chat)) $chat = $GLOBALS['id']+0; $ids = array(); $names = GetNamesOwnedBy(); if (!empty($names)) { foreach($names as $name) { if (($name['chat'] == $chat) || ($name['chat'] == 0)) $ids[] = $name['id']+0; } } if (!empty($_SESSION['chats'][$chat]['id'])) $ids[] = $_SESSION['chats'][$chat]['id']+0; if (!empty($_SESSION['chats'][0]['id'])) $ids[] = $_SESSION['chats'][0]['id']+0; if (count($ids) < 1) return ''; //$query = "SELECT {$GLOBALS['sql_prefix']}concat(assoc.flags) as flags FROM {$GLOBALS['sql_prefix']}userassoc as assoc LEFT JOIN {$GLOBALS['sql_prefix']}chats as chats ON (assoc.chat=chat.id OR assoc.chat=0) WHERE (assoc.chat={$chat} OR assoc.chat=0) AND ("; /* $query = "SELECT {$GLOBALS['sql_prefix']}concat(COALESCE((CASE WHEN chats.owner=users.id THEN 'M' WHEN chats.owner=users.parent THEN 'M' END), assoc.flags)) as flags FROM {$GLOBALS['sql_prefix']}chats as mchats JOIN {$GLOBALS['sql_prefix']}chats as chats ON chats.id>0 AND mchats.id>0 AND (chats.id=mchats.parent OR chats.id=mchats.id) JOIN {$GLOBALS['sql_prefix']}userassoc as assoc ON (chats.id=assoc.chat OR assoc.chat=0) AND (assoc.flags!='1' AND assoc.flags IS NOT NULL) JOIN {$GLOBALS['sql_prefix']}users as users ON (assoc.id=users.id OR assoc.id=users.parent OR chats.owner=users.id OR chats.owner=users.parent) AND ("; foreach ($ids as $id) { $query .= "users.id={$id} OR users.parent={$id} OR "; } */ $query = "SELECT {$GLOBALS['sql_prefix']}concat(flags) as flags FROM {$GLOBALS['sql_prefix']}flagsforchat WHERE chat={$chat} AND ("; foreach ($ids as $id) { $query .= "uid={$id} OR parent={$id} OR "; } $query = preg_replace('/ OR $/i', ')', $query); $ret = ''; $rez = SQL_SingleQuery($query, NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); if (SQL_NumRows($rez)) { $row = SQL_FetchRow($rez); $ret = $row[0]; } SQL_FreeResult($rez); return $ret; } function InsertSettings($chat=0) { if (empty($chat)) $chat = $GLOBALS['id']; if (empty($chat)) return false; $sets = array(); $sets[0] = array(); $sets[$chat] = array(); $rez = SQL_SingleQuery("SELECT chat,set_name,set_value FROM {$GLOBALS['sql_prefix']}chatsettings WHERE (chat={$chat} OR chat=0)", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); for($i=0;$i<$num;$i++) { $row = SQL_FetchAssoc($rez, $i); $sets[$row['chat']][$row['set_name']] = $row['set_value']; } SQL_FreeResult($rez); foreach($GLOBALS['settings'] as $key => $val) { $org = $val; $key = SQL_EscapeString($key); $val = SQL_EscapeString($val); if (!empty($val)) $val = "'{$val}'"; else $val = 'null'; if ($sets[0][$key] == $org) { SQL_EmptyQuery("DELETE FROM {$GLOBALS['sql_prefix']}chatsettings WHERE chat={$chat} AND set_name='{$key}'", __FILE__.' : '.__LINE__.' : '.__FUNCTION__); } else if ($sets[$chat][$key] != $org) { $rez = SQL_SingleQuery("UPDATE {$GLOBALS['sql_prefix']}chatsettings SET set_value={$val} WHERE chat={$chat} AND set_name='{$key}'", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); if (SQL_AffectedRows($rez) < 1) { SQL_EmptyQuery("INSERT INTO {$GLOBALS['sql_prefix']}chatsettings (chat,set_name,set_value) VALUES ({$chat}, '{$key}', {$val})", __FILE__.' : '.__LINE__.' : '.__FUNCTION__); } SQL_FreeResult($rez); } } } function GetChatSettings($chat=0, $reset=false) { if (empty($chat)) $chat = $GLOBALS['id']+0; if (empty($chat)) return false; $rez = SQL_SingleQuery("SELECT set_name,set_value FROM {$GLOBALS['sql_prefix']}chatsettings WHERE (chat={$chat} OR chat=0) ORDER BY chat ASC", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); for($i=0;$i<$num;$i++) { $row = SQL_FetchAssoc($rez, $i); $GLOBALS['settings'][$row['set_name']] = $row['set_value']; } SQL_FreeResult($rez); } function CheckCIDR($addr, $cidr) { list($ip, $mask) = explode('/', $cidr); $mask = 0xffffffff << (32 - $mask); return ((ip2long($addr) & $mask) == (ip2long($ip) & $mask)); } function TruncateString($str, $len) { if (strlen($str) >= $len) $str = substr($str, 0, $len-3).'...'; return $str; } function AutoImgImage($img) { if (preg_match('@^((f|ht)tps?://[^\s\r]+(gif|jpg|jpeg|png))$@is', $img)) return " "; return $img; } ?>