From 93c0fe037da0fe4bc324d5bbe9c3caa2861c3b51 Mon Sep 17 00:00:00 2001 From: cjarrett-hipwood Date: Wed, 7 Aug 2013 11:34:28 -0700 Subject: [PATCH 1/2] Added support for the AWS Cloudfront CDN. --- amazons3/admin/conf.php | 5 + amazons3/index.php | 231 ++++++++++++++++++++-------------------- 2 files changed, 123 insertions(+), 113 deletions(-) diff --git a/amazons3/admin/conf.php b/amazons3/admin/conf.php index 1c36f2d..a081b41 100755 --- a/amazons3/admin/conf.php +++ b/amazons3/admin/conf.php @@ -23,6 +23,7 @@ osc_set_preference('bucket', Params::getParam('bucket'), 'amazons3', 'STRING'); osc_set_preference('access_key', Params::getParam('access_key'), 'amazons3', 'STRING'); osc_set_preference('secret_key', Params::getParam('secret_key'), 'amazons3', 'STRING'); + osc_set_preference('cloudfront', Params::getParam('cloudfront'), 'amazons3', 'STRING'); if(osc_version()<320) { echo '

' . __('Congratulations. The plugin is now configured', 'amazons3') . '.

' ; osc_reset_preferences(); @@ -60,6 +61,10 @@
+
+ +
+
http://aws.amazon.com/s3/'); ?>
diff --git a/amazons3/index.php b/amazons3/index.php index 00b2f8a..7042b8e 100755 --- a/amazons3/index.php +++ b/amazons3/index.php @@ -1,130 +1,135 @@ autocommit(true); - } + Plugin Name: Amazon S3 + Plugin URI: http://www.osclass.org/ + Description: This plugin allows you to upload users' images to Amazon S3 service + Version: 1.0.3 + Author: OSClass + Author URI: http://www.osclass.org/ + Short Name: amazons3 + Plugin update URI: amazon-s3 + */ - function amazon_uninstall() { - osc_delete_preference('bucket', 'amazons3'); - osc_delete_preference('access_key', 'amazons3'); - osc_delete_preference('secret_key', 'amazons3'); - } - - function amazon_upload($resource) { - $s3 = new S3(osc_get_preference('access_key', 'amazons3'), osc_get_preference('secret_key', 'amazons3')); - @$s3->putBucket(osc_get_preference('bucket', 'amazons3'), S3::ACL_PUBLIC_READ); - if(osc_keep_original_image()) { - $s3->putObjectFile(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '_original.jpg', osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '_original.jpg', S3::ACL_PUBLIC_READ); - } - $s3->putObjectFile(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '.jpg', osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '.jpg', S3::ACL_PUBLIC_READ); - $s3->putObjectFile(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '_preview.jpg', osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '_preview.jpg', S3::ACL_PUBLIC_READ); - $s3->putObjectFile(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '_thumbnail.jpg', osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '_thumbnail.jpg', S3::ACL_PUBLIC_READ); - amazon_unlink_resource($resource); + +// load necessary functions +require_once osc_plugins_path() . osc_plugin_folder(__FILE__) . 'S3.php'; + +function amazon_install() { + $conn = getConnection(); + osc_set_preference('bucket', '', 'amazons3', 'STRING'); + osc_set_preference('access_key', '', 'amazons3', 'STRING'); + osc_set_preference('secret_key', '', 'amazons3', 'STRING'); + osc_set_preference('cloudfront', '', 'amazons3', 'STRING'); + $conn->autocommit(true); +} + +function amazon_uninstall() { + osc_delete_preference('bucket', 'amazons3'); + osc_delete_preference('access_key', 'amazons3'); + osc_delete_preference('secret_key', 'amazons3'); + osc_delete_preference('cloudfront', 'amazons3'); +} + +function amazon_upload($resource) { + $s3 = new S3(osc_get_preference('access_key', 'amazons3'), osc_get_preference('secret_key', 'amazons3')); + @$s3->putBucket(osc_get_preference('bucket', 'amazons3'), S3::ACL_PUBLIC_READ); + if (osc_keep_original_image()) { + $s3->putObjectFile(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '_original.jpg', osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '_original.jpg', S3::ACL_PUBLIC_READ); } - - function amazon_resource_path($path) { - return "http://". osc_get_preference('bucket', 'amazons3') .".s3.amazonaws.com/" . str_replace(osc_base_url().osc_resource_field("s_path"), '', $path); + $s3->putObjectFile(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '.jpg', osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '.jpg', S3::ACL_PUBLIC_READ); + $s3->putObjectFile(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '_preview.jpg', osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '_preview.jpg', S3::ACL_PUBLIC_READ); + $s3->putObjectFile(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '_thumbnail.jpg', osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '_thumbnail.jpg', S3::ACL_PUBLIC_READ); + amazon_unlink_resource($resource); +} + +function amazon_resource_path($path) { + $cloudfront = osc_get_preference('cloudfront', 'amazons3'); + if (!empty($cloudfront)) { + return "http://" . $cloudfront. "/" . str_replace(osc_base_url() . osc_resource_field("s_path"), '', $path); } - - function amazon_regenerate_image($resource) { - $s3 = new S3(osc_get_preference('access_key', 'amazons3'), osc_get_preference('secret_key', 'amazons3')); - $path = $resource['pk_i_id']. "_original.jpg"; - $img = @$s3->getObject(osc_get_preference('bucket','amazons3'), $path); - if(!$img) { - $path = $resource['pk_i_id']. ".jpg"; - $img = @$s3->getObject(osc_get_preference('bucket','amazons3'), $path); - } - if(!$img) { - $path = $resource['pk_i_id']. "_thumbnail.jpg"; - $img = @$s3->getObject(osc_get_preference('bucket','amazons3'), $path); - } - if($img) { - $s3->getObject(osc_get_preference('bucket','amazons3'), $path, osc_content_path() . 'uploads/' . $resource['pk_i_id'] . ".jpg"); - @$s3->deleteObject(osc_get_preference('bucket','amazons3'), $resource['pk_i_id']. "_original.jpg"); - @$s3->deleteObject(osc_get_preference('bucket','amazons3'), $resource['pk_i_id']. ".jpg"); - @$s3->deleteObject(osc_get_preference('bucket','amazons3'), $resource['pk_i_id']. "_preview.jpg"); - @$s3->deleteObject(osc_get_preference('bucket','amazons3'), $resource['pk_i_id']. "_thumbnail.jpg"); - } + return "http://" . osc_get_preference('bucket', 'amazons3') . ".s3.amazonaws.com/" . str_replace(osc_base_url() . osc_resource_field("s_path"), '', $path); +} + +function amazon_regenerate_image($resource) { + $s3 = new S3(osc_get_preference('access_key', 'amazons3'), osc_get_preference('secret_key', 'amazons3')); + $path = $resource['pk_i_id'] . "_original.jpg"; + $img = @$s3->getObject(osc_get_preference('bucket', 'amazons3'), $path); + if (!$img) { + $path = $resource['pk_i_id'] . ".jpg"; + $img = @$s3->getObject(osc_get_preference('bucket', 'amazons3'), $path); } - - function amazon_unlink_resource($resource) { - @unlink(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '_original.jpg'); - @unlink(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '.jpg'); - @unlink(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '_preview.jpg'); - @unlink(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '_thumbnail.jpg'); + if (!$img) { + $path = $resource['pk_i_id'] . "_thumbnail.jpg"; + $img = @$s3->getObject(osc_get_preference('bucket', 'amazons3'), $path); } - - function amazon_delete_from_bucket($resource) { - $s3 = new S3(osc_get_preference('access_key', 'amazons3'), osc_get_preference('secret_key', 'amazons3')); - @$s3->deleteObject(osc_get_preference('bucket','amazons3'), $resource['pk_i_id']. "_original.jpg"); - @$s3->deleteObject(osc_get_preference('bucket','amazons3'), $resource['pk_i_id']. ".jpg"); - @$s3->deleteObject(osc_get_preference('bucket','amazons3'), $resource['pk_i_id']. "_preview.jpg"); - @$s3->deleteObject(osc_get_preference('bucket','amazons3'), $resource['pk_i_id']. "_thumbnail.jpg"); + if ($img) { + $s3->getObject(osc_get_preference('bucket', 'amazons3'), $path, osc_content_path() . 'uploads/' . $resource['pk_i_id'] . ".jpg"); + @$s3->deleteObject(osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . "_original.jpg"); + @$s3->deleteObject(osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . ".jpg"); + @$s3->deleteObject(osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . "_preview.jpg"); + @$s3->deleteObject(osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . "_thumbnail.jpg"); } - +} + +function amazon_unlink_resource($resource) { + @unlink(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '_original.jpg'); + @unlink(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '.jpg'); + @unlink(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '_preview.jpg'); + @unlink(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '_thumbnail.jpg'); +} - function amazon_admin_menu() { - if(osc_version()<320) { - echo '

Amazon S3

+function amazon_delete_from_bucket($resource) { + $s3 = new S3(osc_get_preference('access_key', 'amazons3'), osc_get_preference('secret_key', 'amazons3')); + @$s3->deleteObject(osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . "_original.jpg"); + @$s3->deleteObject(osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . ".jpg"); + @$s3->deleteObject(osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . "_preview.jpg"); + @$s3->deleteObject(osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . "_thumbnail.jpg"); +} + +function amazon_admin_menu() { + if (osc_version() < 320) { + echo '

Amazon S3

'; - } else { - osc_add_admin_submenu_divider('plugins', 'Amazon S3 plugin', 'amazons3_divider', 'administrator'); - osc_add_admin_submenu_page('plugins', __('Amazon S3 options', 'amazons3'), osc_route_admin_url('amazons3-admin-conf'), 'amazons3_settings', 'administrator'); - } + } else { + osc_add_admin_submenu_divider('plugins', 'Amazon S3 plugin', 'amazons3_divider', 'administrator'); + osc_add_admin_submenu_page('plugins', __('Amazon S3 options', 'amazons3'), osc_route_admin_url('amazons3-admin-conf'), 'amazons3_settings', 'administrator'); } - - function amazon_configure_link() { - if(osc_version()<320) { - osc_redirect_to(osc_admin_render_plugin_url(osc_plugin_folder(__FILE__)).'admin/conf.php'); - } else { - osc_redirect_to(osc_route_admin_url('amazons3-admin-conf')); - } +} + +function amazon_configure_link() { + if (osc_version() < 320) { + osc_redirect_to(osc_admin_render_plugin_url(osc_plugin_folder(__FILE__)) . 'admin/conf.php'); + } else { + osc_redirect_to(osc_route_admin_url('amazons3-admin-conf')); } - - if(osc_version()>=320) { - /** - * ADD ROUTES (VERSION 3.2+) - */ - osc_add_route('amazons3-admin-conf', 'amazons3/admin/conf', 'amazons3/admin/conf', osc_plugin_folder(__FILE__).'admin/conf.php'); - } - - +} + +if (osc_version() >= 320) { /** - * ADD HOOKS + * ADD ROUTES (VERSION 3.2+) */ - osc_register_plugin(osc_plugin_path(__FILE__), 'amazon_install'); - osc_add_hook(osc_plugin_path(__FILE__)."_uninstall", 'amazon_uninstall'); - osc_add_hook(osc_plugin_path(__FILE__)."_configure", 'amazon_configure_link'); - - osc_add_hook('uploaded_file', 'amazon_upload'); - osc_add_filter('resource_path', 'amazon_resource_path'); - osc_add_hook('regenerate_image', 'amazon_regenerate_image'); - osc_add_hook('regenerated_image', 'amazon_upload'); - osc_add_hook('delete_resource', 'amazon_delete_from_bucket'); - if(osc_version()<320) { - osc_add_hook('admin_menu', 'amazon_admin_menu'); - } else { - osc_add_hook('admin_menu_init', 'amazon_admin_menu'); - } - + osc_add_route('amazons3-admin-conf', 'amazons3/admin/conf', 'amazons3/admin/conf', osc_plugin_folder(__FILE__) . 'admin/conf.php'); +} + + +/** + * ADD HOOKS + */ +osc_register_plugin(osc_plugin_path(__FILE__), 'amazon_install'); +osc_add_hook(osc_plugin_path(__FILE__) . "_uninstall", 'amazon_uninstall'); +osc_add_hook(osc_plugin_path(__FILE__) . "_configure", 'amazon_configure_link'); + +osc_add_hook('uploaded_file', 'amazon_upload'); +osc_add_filter('resource_path', 'amazon_resource_path'); +osc_add_hook('regenerate_image', 'amazon_regenerate_image'); +osc_add_hook('regenerated_image', 'amazon_upload'); +osc_add_hook('delete_resource', 'amazon_delete_from_bucket'); +if (osc_version() < 320) { + osc_add_hook('admin_menu', 'amazon_admin_menu'); +} else { + osc_add_hook('admin_menu_init', 'amazon_admin_menu'); +} ?> From 90ff5bbb23293b9573b5aad4a6e8f7c10b624657 Mon Sep 17 00:00:00 2001 From: cjarrett-hipwood Date: Tue, 11 Feb 2014 13:46:44 -0800 Subject: [PATCH 2/2] Fixed the S3 plugin for the newest version of osclass. --- amazons3/index.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/amazons3/index.php b/amazons3/index.php index 7042b8e..c90a883 100755 --- a/amazons3/index.php +++ b/amazons3/index.php @@ -35,11 +35,12 @@ function amazon_upload($resource) { $s3 = new S3(osc_get_preference('access_key', 'amazons3'), osc_get_preference('secret_key', 'amazons3')); @$s3->putBucket(osc_get_preference('bucket', 'amazons3'), S3::ACL_PUBLIC_READ); if (osc_keep_original_image()) { - $s3->putObjectFile(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '_original.jpg', osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '_original.jpg', S3::ACL_PUBLIC_READ); + $s3->putObjectFile(str_replace("oc-content/", $resource['s_path'], osc_content_path()) . $resource['pk_i_id'] . '_original.'. $resource['s_extension'], osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '_original.'. $resource['s_extension'], S3::ACL_PUBLIC_READ); } - $s3->putObjectFile(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '.jpg', osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '.jpg', S3::ACL_PUBLIC_READ); - $s3->putObjectFile(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '_preview.jpg', osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '_preview.jpg', S3::ACL_PUBLIC_READ); - $s3->putObjectFile(osc_content_path() . 'uploads/' . $resource['pk_i_id'] . '_thumbnail.jpg', osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '_thumbnail.jpg', S3::ACL_PUBLIC_READ); + + $s3->putObjectFile(str_replace("oc-content/", $resource['s_path'], osc_content_path()) . $resource['pk_i_id'] . '.'. $resource['s_extension'], osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '.'. $resource['s_extension'], S3::ACL_PUBLIC_READ); + $s3->putObjectFile(str_replace("oc-content/", $resource['s_path'], osc_content_path()) . $resource['pk_i_id'] . '_preview.'. $resource['s_extension'], osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '_preview.'. $resource['s_extension'], S3::ACL_PUBLIC_READ); + $s3->putObjectFile(str_replace("oc-content/", $resource['s_path'], osc_content_path()) . $resource['pk_i_id'] . '_thumbnail.'. $resource['s_extension'], osc_get_preference('bucket', 'amazons3'), $resource['pk_i_id'] . '_thumbnail.'. $resource['s_extension'], S3::ACL_PUBLIC_READ); amazon_unlink_resource($resource); }