public function get_attachment_s3_url($post_id, $s3object, $expires = null, $size = null, $meta = null, $headers = array())
{
$scheme = $this->get_s3_url_scheme();
// We don't use $this->get_s3object_region() here because we don't want
// to make an AWS API call and slow down page loading
if (isset($s3object['region']) && self::DEFAULT_REGION !== $s3object['region']) {
$region = $this->translate_region($s3object['region']);
} else {
$region = '';
}
$size = $this->maybe_convert_size_to_string($post_id, $size);
// Force use of secured URL when ACL has been set to private
if (is_null($expires)) {
if (is_null($size) && isset($s3object['acl']) && self::PRIVATE_ACL === $s3object['acl']) {
// Full size URL private
$expires = self::DEFAULT_EXPIRES;
}
if (!is_null($size) && isset($s3object['sizes'][$size]['acl']) && self::PRIVATE_ACL === $s3object['sizes'][$size]['acl']) {
// Alternative size URL private
$expires = self::DEFAULT_EXPIRES;
}
}
if (!is_null($size)) {
if (is_null($meta)) {
$meta = get_post_meta($post_id, '_wp_attachment_metadata', true);
}
if (is_wp_error($meta)) {
return $meta;
}
if (!empty($meta) && isset($meta['sizes'][$size]['file'])) {
$size_prefix = dirname($s3object['key']);
$size_file_prefix = '.' === $size_prefix ? '' : $size_prefix . '/';
$s3object['key'] = $size_file_prefix . $meta['sizes'][$size]['file'];
}
}
if (!is_null($expires) && $this->is_plugin_setup()) {
try {
$expires = time() + $expires;
$secure_url = $this->get_s3client($region)->getObjectUrl($s3object['bucket'], $s3object['key'], $expires, $headers);
return apply_filters('as3cf_get_attachment_secure_url', $secure_url, $s3object, $post_id, $expires, $headers);
} catch (Exception $e) {
return new WP_Error('exception', $e->getMessage());
}
}
$s3object['key'] = $this->maybe_update_cloudfront_path($s3object['key']);
$domain_bucket = $this->get_s3_url_domain($s3object['bucket'], $region, $expires);
$file = $this->encode_filename_in_path($s3object['key']);
$url = $scheme . '://' . $domain_bucket . '/' . $file;
return apply_filters('as3cf_get_attachment_url', $url, $s3object, $post_id, $expires, $headers);
}