Exemple #1
0
	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;
	}
Exemple #2
0
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");
}