function has_thumb() { global $globals; if ($this->thumb_x > 0 && $this->thumb_y > 0) { $chain = get_cache_dir_chain($this->id); $file = $globals['cache_dir']."/$chain/thumb-$this->id.jpg"; $filepath = mnmpath."/$file"; if (is_readable($filepath)) { return $globals['base_static'] . $file; } elseif ($globals['Amazon_S3_media_bucket'] && $globals['Amazon_S3_local_cache']) { create_cache_dir_chain(mnmpath.'/'.$globals['cache_dir'], $chain); // Get thumbnail from S3 if (Media::get("$this->id.jpg", 'thumbs', $filepath)) { return $globals['base_static'] . $file; } else { // Do extra check, if S3 is working, mark thumb as deleted if (($buckets = Media::buckets(false)) && in_array($globals['Amazon_S3_media_bucket'], $buckets) && is_writable(mnmpath.'/'.$globals['cache_dir'])) { // Double check syslog(LOG_NOTICE, "Meneame, deleting unexisting thumb for $this->id"); $this->delete_thumb(); } } } } return false; }
function avatar_get_from_db($user, $size = 0) { global $db, $globals; if (!in_array($size, $globals['avatars_allowed_sizes'])) { return false; } $time = $db->get_var("select user_avatar from users where user_id={$user}"); if (!$globals['Amazon_S3_local_cache'] && $globals['Amazon_S3_media_bucket'] && is_writable('/tmp')) { $subdir = '/tmp'; } else { $chain = get_cache_dir_chain($user); create_cache_dir_chain(get_avatars_dir(), $chain); $subdir = get_avatars_dir() . '/' . $chain; } if (!is_writable($subdir)) { return false; } $file_base = $subdir . "/{$user}-{$time}"; $delete = false; $original = false; if ($globals['Amazon_S3_media_bucket']) { // Get avatar from S3 // Try up to 3 times to download from Amazon $try = 0; while ($original == false && $try < 3) { if (Media::get("{$user}-{$time}-{$size}.jpg", 'avatars', "{$file_base}-{$size}.jpg")) { return file_get_contents("{$file_base}-{$size}.jpg"); } if (Media::get("{$user}-{$time}.jpg", 'avatars', "{$file_base}-orig.jpg")) { $delete_it = true; $original = "{$file_base}-orig.jpg"; } elseif (is_readable($file_base . '-80.jpg') && filesize($file_base . '-80.jpg') > 0 || Media::get("{$user}-{$time}-80.jpg", 'avatars', "{$file_base}-80.jpg")) { $original = $file_base . '-80.jpg'; } else { $try++; usleep(rand(1, 20)); // Wait a little to minimize race-conditions } } if (!$original) { // The images were not found in S3 if (($buckets = Media::buckets(false)) && in_array($globals['Amazon_S3_media_bucket'], $buckets) && is_writable(mnmpath . '/' . $globals['cache_dir'])) { // Double check avatars_remove($user); } return false; } } else { //Get from DB if (!is_readable($file_base . '-80.jpg')) { $img = $db->get_var("select avatar_image from avatars where avatar_id={$user}"); if (!strlen($img) > 0) { if (is_writable(mnmpath . '/' . $globals['cache_dir'])) { // Double check avatars_remove($user); } return false; } file_put_contents($file_base . '-80.jpg', $img); $original = $file_base . '-80.jpg'; } } if ($size > 0 && $size != 80) { avatar_resize($original, "{$file_base}-{$size}.jpg", $size); if ($delete_it) { @unlink($original); } } return file_get_contents("{$file_base}-{$size}.jpg"); }