decrypt($_COOKIE['session']); } if (isset($LoginCookie)) { list($SessionID, $UserID) = explode('|~|', $Enc->decrypt($LoginCookie)); $UserID = (int)$UserID; $UserInfo = $Cache->get_value("user_info_$UserID"); $Permissions = $Cache->get_value('perm_'.$UserInfo['PermissionID']); } function check_perms($PermissionName) { global $Permissions; return (isset($Permissions['Permissions'][$PermissionName])) ? true : false; } function error($Type) { header('Content-type: image/gif'); die(file_get_contents(SERVER_ROOT.'/sections/image/'.$Type.'.gif')); } function invisible($Image) { $Count = imagecolorstotal($Image); if ($Count == 0) { return false; } $TotalAlpha = 0; for ($i = 0; $i < $Count; ++$i) { $Color = imagecolorsforindex($Image, $i); $TotalAlpha += $Color['alpha']; } return (($TotalAlpha/$Count) == 127) ? true : false; } function is_number($Str) { $Return = true; if ($Str < 0) { $Return = false; } // We're converting input to a int, then string and comparing to original $Return = ($Str == strval(intval($Str)) ? true : false); return $Return; } function verysmall($Image) { return ((imagesx($Image) * imagesy($Image)) < 25) ? true : false; } function image_type($Data) { if (!strncmp($Data, 'GIF', 3)) { return 'gif'; } if (!strncmp($Data, pack('H*', '89504E47'), 4)) { return 'png'; } if (!strncmp($Data, pack('H*', 'FFD8'), 2)) { return 'jpeg'; } if (!strncmp($Data, 'BM', 2)) { return 'bmp'; } if (!strncmp($Data, 'II', 2) || !strncmp($Data, 'MM', 2)) { return 'tiff'; } } function image_height($Type, $Data) { $Length = strlen($Data); global $URL, $_GET; switch ($Type) { case 'jpeg': // See http://www.obrador.com/essentialjpeg/headerinfo.htm $i = 4; $Data = (substr($Data, $i)); $Block = unpack('nLength', $Data); $Data = substr($Data, $Block['Length']); $i += $Block['Length']; $Str []= "Started 4, + ".$Block['Length']; while ($Data != '') { // iterate through the blocks until we find the start of frame marker (FFC0) $Block = unpack('CBlock/CType/nLength', $Data); // Get info about the block if ($Block['Block'] != '255') { // We should be at the start of a new block break; } if ($Block['Type'] != '192') { // C0 $Data = substr($Data, $Block['Length'] + 2); // Next block $Str []= "Started $i, + ".($Block['Length'] + 2); $i += ($Block['Length'] + 2); } else { // We're at the FFC0 block $Data = substr($Data, 5); // Skip FF C0 Length(2) precision(1) $i += 5; $Height = unpack('nHeight', $Data); return $Height['Height']; } } break; case 'gif': $Data = substr($Data, 8); $Height = unpack('vHeight', $Data); return $Height['Height']; case 'png': $Data = substr($Data, 20); $Height = unpack('NHeight', $Data); return $Height['Height']; default: return 0; } } function send_pm($ToID, $FromID, $Subject, $Body, $ConvID = '') { global $DB, $Cache; if ($ToID == 0) { // Don't allow users to send messages to the system return; } if ($ConvID == '') { $DB->query(" INSERT INTO pm_conversations (Subject) VALUES ('$Subject')"); $ConvID = $DB->inserted_id(); $DB->query(" INSERT INTO pm_conversations_users (UserID, ConvID, InInbox, InSentbox, SentDate, ReceivedDate, UnRead) VALUES ('$ToID', '$ConvID', '1', '0', '".sqltime()."', '".sqltime()."', '1')"); if ($FromID != 0) { $DB->query(" INSERT INTO pm_conversations_users (UserID, ConvID, InInbox, InSentbox, SentDate, ReceivedDate, UnRead) VALUES ('$FromID', '$ConvID', '0', '1', '".sqltime()."', '".sqltime()."', '0')"); } } else { $DB->query(" UPDATE pm_conversations_users SET InInbox = '1', UnRead = '1', ReceivedDate = '".sqltime()."' WHERE UserID = '$ToID' AND ConvID = '$ConvID'"); $DB->query(" UPDATE pm_conversations_users SET InSentbox = '1', SentDate = '".sqltime()."' WHERE UserID = '$FromID' AND ConvID = '$ConvID'"); } $DB->query(" INSERT INTO pm_messages (SenderID, ConvID, SentDate, Body) VALUES ('$FromID', '$ConvID', '".sqltime()."', '$Body')"); // Clear the caches of the inbox and sentbox /*$DB->query(" SELECT UnRead FROM pm_conversations_users WHERE ConvID = '$ConvID' AND UserID = '$ToID'"); */ $DB->query(" SELECT COUNT(ConvID) FROM pm_conversations_users WHERE UnRead = '1' AND UserID = '$ToID' AND InInbox = '1'"); list($UnRead) = $DB->next_record(MYSQLI_BOTH, FALSE); $Cache->cache_value("inbox_new_$ToID", $UnRead); //if ($UnRead == 0) { // $Cache->increment("inbox_new_$ToID"); //} return $ConvID; } function send_irc($Raw) { $IRCSocket = fsockopen(SOCKET_LISTEN_ADDRESS, SOCKET_LISTEN_PORT); fwrite($IRCSocket, $Raw); fclose($IRCSocket); } function display_str($Str) { if ($Str === NULL || $Str === false || is_array($Str)) { return ''; } if ($Str != '' && !is_number($Str)) { $Str = make_utf8($Str); $Str = mb_convert_encoding($Str, 'HTML-ENTITIES', 'UTF-8'); $Str = preg_replace("/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,5};)/m", '&', $Str); $Replace = array( "'",'"',"<",">", '€','‚','ƒ','„','…','†','‡','ˆ', '‰','Š','‹','Œ','Ž','‘','’','“', '”','•','–','—','˜','™','š','›', 'œ','ž','Ÿ' ); $With = array( ''','"','<','>', '€','‚','ƒ','„','…','†','‡','ˆ', '‰','Š','‹','Œ','Ž','‘','’','“', '”','•','–','—','˜','™','š','›', 'œ','ž','Ÿ' ); $Str = str_replace($Replace, $With, $Str); } return $Str; } function make_utf8($Str) { if ($Str != '') { if (is_utf8($Str)) { $Encoding = 'UTF-8'; } if (empty($Encoding)) { $Encoding = mb_detect_encoding($Str, 'UTF-8, ISO-8859-1'); } if (empty($Encoding)) { $Encoding = 'ISO-8859-1'; } if ($Encoding == 'UTF-8') { return $Str; } else { return @mb_convert_encoding($Str, 'UTF-8', $Encoding); } } } function is_utf8($Str) { return preg_match('%^(?: [\x09\x0A\x0D\x20-\x7E] // ASCII | [\xC2-\xDF][\x80-\xBF] // non-overlong 2-byte | \xE0[\xA0-\xBF][\x80-\xBF] // excluding overlongs | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} // straight 3-byte | \xED[\x80-\x9F][\x80-\xBF] // excluding surrogates | \xF0[\x90-\xBF][\x80-\xBF]{2} // planes 1-3 | [\xF1-\xF3][\x80-\xBF]{3} // planes 4-15 | \xF4[\x80-\x8F][\x80-\xBF]{2} // plane 16 )*$%xs', $Str ); } require(SERVER_ROOT.'/sections/image/index.php'); ?>