$yratio) { $rx = $dx; $ry = $oy/$xratio; } else if ($xratio < $yratio) { $rx = $ox/$yratio; $ry = $dy; } else { $rx = $dx; $ry = $dy; } return array($rx, $ry); } function ScaleImageSize($image, $pimgx=0, $pimgy=0) { if ($pimgx == 0) $pimgx = $GLOBALS['settings']['pimgx']; $pimgx = SQL_EscapeString($pimgx); if ($pimgy == 0) $pimgy = $GLOBALS['settings']['pimgy']; $pimgy = SQL_EscapeString($pimgy); SQL_EmptyQuery("DELETE FROM {$GLOBALS['sql_prefix']}imagecache WHERE stamp<(now() - INTERVAL '7 day')", __FILE__.' : '.__LINE__.' : '.__FUNCTION__); if (is_array($image)) { $rez = array(); if (count($image) > 0) { $query = "SELECT width,height,sum FROM {$GLOBALS['sql_prefix']}imagecache WHERE ("; foreach ($image as $img) { $img = crc32($img); $query .= "sum={$img} OR "; } $query = ereg_replace(' OR $', ')', $query); $images = array(); $rez = SQL_SingleQuery($query, NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); for($i=0;$i<$num;$i++) { $row = SQL_FetchAssoc($rez, $i); $images[] = $row; } SQL_FreeResult($rez); $rez = array(); $ine = array(); $cx = count($image); for($cc=0;$cc<$cx;$cc++) { if ($loc = ArrayFind($images, 'sum', crc32($image[$cc]))) { $loc--; $rxy = ScaleNicely($images[$loc]['width'], $images[$loc]['height'], $pimgx, $pimgy); $images[$loc]['width'] = floor($rxy[0]); $images[$loc]['height'] = floor($rxy[1]); $images[$loc]['alt'] = 'Found in Cache'; $rez[] = $images[$loc]; } else { $ine[] = $image[$cc]; } } foreach($ine as $image) { $img = @getimagesize($image); $crcimage = crc32($image); if (($img[0] >= 1) && ($img[1] >= 1)) { SQL_EmptyQuery("INSERT INTO {$GLOBALS['sql_prefix']}imagecache (width,height,sum) VALUES ({$img[0]},{$img[1]},{$crcimage})", __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $rxy = ScaleNicely($img[0], $img[1], $pimgx, $pimgy); $rez[] = array( 'width' => floor($rxy[0]), 'height' => floor($rxy[1]), 'sum' => $crcimage, 'alt' => 'Cached' ); } else { SQL_EmptyQuery("INSERT INTO {$GLOBALS['sql_prefix']}imagecache (width,height,sum) VALUES ({$pimgx},{$pimgy},{$crcimage})", __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $rez[] = array( 'width' => $pimgx, 'height' => $pimgy, 'sum' => $crcimage, 'alt' => 'Error' ); } } } return $rez; } else { $crcimage = crc32($image); if ($crcimage == 0) return "width='$pimgx' height='$pimgy'"; $rez = SQL_SingleQuery("SELECT width,height,sum FROM {$GLOBALS['sql_prefix']}imagecache WHERE sum=$crcimage", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); if (SQL_NumRows($rez) > 0) $img = SQL_FetchAssoc($rez); SQL_FreeResult($rez); if ($img['sum'] == $crcimage) { $rxy = ScaleNicely($img['width'], $img['height'], $pimgx, $pimgy); return "width='".floor($rxy[0])."' height='".floor($rxy[1])."' alt='Found in Cache'"; } else { $img = GetImageSize($image); if (($img[0] >= 1) && ($img[1] >= 1)) { SQL_EmptyQuery("INSERT INTO {$GLOBALS['sql_prefix']}imagecache (width,height,sum) VALUES ($img[0],$img[1],$crcimage)", __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $rxy = ScaleNicely($img[0], $img[1], $pimgx, $pimgy); return "width='".floor($rxy[0])."' height='".floor($rxy[1])."' alt='Cached'"; } } return "width='$pimgx' height='$pimgy' alt='Error'"; } } function GetUserImagebans($userid=0) { if (empty($userid)) $userid = PChoose($_SESSION['chats'][$GLOBALS['id']]['id'], $_SESSION['chats'][0]['id'])+0; if (empty($userid)) return false; $extra = ''; if (!empty($_SESSION['chats'][$GLOBALS['id']]['parent'])) $extra .= ' OR userid='.$_SESSION['chats'][$GLOBALS['id']]['parent']; if (!empty($_SESSION['chats'][0]['parent'])) $extra .= ' OR userid='.$_SESSION['chats'][0]['parent']; $rez = SQL_SingleQuery("SELECT banmask FROM {$GLOBALS['sql_prefix']}imageban WHERE userid={$userid}{$extra}", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); for($i=0;$i<$num;$i++) { $row = SQL_FetchAssoc($rez); $_SESSION['imagebans'][] = WildcardToPreg($row['banmask']); } SQL_FreeResult($rez); $_SESSION['imagebans'] = array_unique($_SESSION['imagebans']); sort($_SESSION['imagebans']); } function GetChatImagebans($id=0, $reset=false) { if ($id == 0) $id = $GLOBALS['id']; MMC_Lock("Chat.ImgBan.{$id}"); if ($reset) MMC_Unset("Chat.ImgBan.{$id}"); $GLOBALS['imagebans'] = MMC_Get("Chat.ImgBan.{$id}"); if (!is_array($GLOBALS['imagebans'])) { $GLOBALS['imagebans'] = array(); $rez = SQL_SingleQuery("SELECT banmask FROM {$GLOBALS['sql_prefix']}imageban WHERE (chat={$id} OR chat=0)", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); for($i=0;$i<$num;$i++) { $row = SQL_FetchAssoc($rez); $GLOBALS['imagebans'][] = WildcardToPreg($row['banmask']); } SQL_FreeResult($rez); MMC_Set("Chat.ImgBan.{$id}", $GLOBALS['imagebans']); } $GLOBALS['imagebans'] = array_unique($GLOBALS['imagebans']); sort($GLOBALS['imagebans']); MMC_Unlock("Chat.ImgBan.{$id}"); } function CheckImageBanned($url, $bans) { $cx = count($bans); for($i=0;$i<$cx;$i++) { if (preg_match('@'.$bans[$i].'@is', $url)) return true; } return false; } function GetImagesFor($chat=0, $user=0, $kbmin=0, $kbmax=0, $gallery=0, $limit=0) { $query = "SELECT imgs.hash,imgs.size,imgs.width,imgs.height,mim.mime_type as mime FROM {$GLOBALS['sql_prefix']}images as imgs LEFT JOIN {$GLOBALS['sql_prefix']}mime_types as mim ON (imgs.mime_id=mim.mime_id) WHERE imgs.banned IS NOT TRUE "; if (!empty($chat)) { $chat = SQL_EscapeString($chat)+0; $query .= " AND imgs.chat={$chat}"; } if (!empty($user)) { $user = SQL_EscapeString($user)+0; $query .= " AND imgs.owner={$user}"; } if (!empty($kbmin)) { $kbmin = SQL_EscapeString($kbmin)+0; $query .= " AND imgs.size>{$kbmin}"; } if (!empty($kbmax)) { $kbmax = SQL_EscapeString($kbmax)+0; $query .= " AND imgs.size<{$kbmax}"; } /* if ($gallery == 1) $query .= "(flags IS NOT NULL AND flags LIKE '%G%') AND "; else if ($gallery == 2) $query .= "(flags IS NULL OR flags NOT LIKE '%G%') AND "; //*/ $query .= " ORDER BY imgs.created DESC "; if (!empty($limit)) { $limit = SQL_EscapeString($limit)+0; $query .= "LIMIT {$limit}"; } $images = array(); $rez = SQL_SingleQuery($query, NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); for($i=0; $i<$num ; $i++) { $row = SQL_FetchAssoc($rez, $i); $images[$row['hash']] = $row; } SQL_FreeResult($rez); return $images; } function InsertImage($file, $name='') { if (is_file($file)) { $info = GetImageSize($file); $ext = ImageMimeToExt($info['mime']); if (!empty($info) && !empty($ext)) { $mime_id = 'null'; $rez = SQL_SingleQuery( "SELECT mime_id FROM {$GLOBALS['sql_prefix']}mime_types WHERE mime_type='{$info['mime']}'", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); if (!empty($num)) { $mime_id = SQL_FetchAssoc($rez); $mime_id = $mime_id['mime_id']; } SQL_FreeResult($rez); $name = SQL_EscapeString(preg_replace('@[^-_.a-zA-Z0-9]+@', '', $name)); $md5sum = md5_file($file); $size = filesize($file); $rez = SQL_SingleQuery("UPDATE {$GLOBALS['sql_prefix']}images SET lasthit=now() WHERE hash='$md5sum'", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); if (SQL_AffectedRows($rez) < 1) { SQL_EmptyQuery("INSERT INTO {$GLOBALS['sql_prefix']}images (hash,size,mime_id,width,height) VALUES ('$md5sum', $size, $mime_id, {$info[0]}, {$info[1]})", __FILE__.' : '.__LINE__.' : '.__FUNCTION__); } SQL_FreeResult($rez); $rez = SQL_SingleQuery( "SELECT imgs.id as id, meta.name as name FROM {$GLOBALS['sql_prefix']}images as imgs LEFT JOIN {$GLOBALS['sql_prefix']}image_meta as meta ON (meta.image_id=imgs.id AND meta.name='$name') WHERE imgs.hash='{$md5sum}'", NULL, __FILE__.' : '.__LINE__.' : '.__FUNCTION__); $num = SQL_NumRows($rez); if (!empty($num)) { $imgid = SQL_FetchAssoc($rez); if (empty($imgid['name'])) { SQL_EmptyQuery( "INSERT INTO {$GLOBALS['sql_prefix']}image_meta (image_id,name) VALUES ({$imgid['id']}, '$name')", __FILE__.' : '.__LINE__.' : '.__FUNCTION__); } } SQL_FreeResult($rez); return true; } } return false; } function InsertImagePlain($file) { return InsertImage($file, $file); } function ImageMimeToExt($mime) { $mime = strtolower($mime); if ($mime == 'image/gif') return 'gif'; else if ($mime == 'image/jpeg') return 'jpg'; else if ($mime == 'image/png') return 'png'; else if ($mime == 'application/x-shockwave-flash') return 'swf'; return NULL; } function ImageExtToMime($mime) { $mime = strtolower($mime); if ($mime == 'gif') return 'image/gif'; else if ($mime == 'jpg') return 'image/jpeg'; else if ($mime == 'png') return 'image/png'; else if ($mime == 'swf') return 'application/x-shockwave-flash'; return NULL; } function HandleImageServer() { if (empty($_REQUEST['ss']) || ($_REQUEST['ss'] == 'browse')) { echo '
'; print_r(GetImagesFor($GLOBALS['o_chatid'], $GLOBALS['o_userid'], 0, 0, 0, 25)); echo '