static function upgrade($version) { log::info("aws_s3", "Commencing module upgrade (" . $version . ")"); switch ($version) { case 0: log::info("aws_s3", "Installing version 1"); @mkdir(VARPATH . "modules/aws_s3"); @mkdir(VARPATH . "modules/aws_s3/log"); // installation's unique identifier - allows multiple g3's pointing to the same s3 bucket. if (!module::get_var("aws_s3", "g3id")) { module::set_var("aws_s3", "g3id", md5(time())); } module::set_var("aws_s3", "synced", false); module::set_var("aws_s3", "enabled", false); module::set_var("aws_s3", "access_key", ""); module::set_var("aws_s3", "secret_key", ""); module::set_var("aws_s3", "bucket_name", ""); module::set_version("aws_s3", 1); case 1: log::info("aws_s3", "Upgrading to version 2"); $db = Database::instance(); $db->query("CREATE TABLE {aws_s3_meta} (\n `item_id` int(9) NOT NULL,\n `item_hash` varchar(32) NOT NULL DEFAULT '',\n `thumb_uploaded` smallint(1) NOT NULL DEFAULT 0,\n `resize_uploaded` smallint(1) NOT NULL DEFAULT 0,\n `fullsize_uploaded` smallint(1) NOT NULL DEFAULT 0,\n `local_deleted` smallint(1) NOT NULL DEFAULT 0,\n PRIMARY KEY (`item_id`)\n ) DEFAULT CHARSET=utf8;"); module::set_var("aws_s3", "upload_thumbs", true); module::set_var("aws_s3", "upload_resizes", true); module::set_var("aws_s3", "upload_fullsizes", true); module::set_var("aws_s3", "s3_storage_only", false); if (module::get_var("aws_s3", "synced")) { // v1 has already synced this installation to s3. mark all the items with the relevant meta data $items = ORM::factory("item")->find_all(); foreach ($items as $item) { aws_s3::log("Updating S3 meta for item ID: " . $item->id); $item->s3_thumb_uploaded = true; if (!$item->is_album()) { $item->s3_resize_uploaded = true; $item->s3_fullsize_uploaded = true; } $item->s3_local_deleted = false; $item->s3_item_hash = md5($item->relative_path()); $item->save_s3_meta(); } } else { // check various states after upgrade from v1.. if (module::get_var("aws_s3", "access_key") != "" && module::get_var("aws_s3", "secret_key") != "" && module::get_var("aws_s3", "bucket_name") != "" && aws_s3::validate_access_details(module::get_var("aws_s3", "access_key"), module::get_var("aws_s3", "secret_key"), module::get_var("aws_s3", "bucket_name"))) { // details are correct but hasn't been synced. if (aws_s3::can_schedule()) { // i can schedule this task aws_s3::schedule_full_sync2(); site_status::warning("Your site has been scheduled for full Amazon S3 re-synchronisation. This message will clear when this has been completed.", "aws_s3_not_synced"); } else { // i CAN'T schedule it.. site_status::warning(t('Your site has not been synchronised to Amazon S3. Until it has, your server will continue to serve image content to your visitors.<br />Click <a href="%url" class="g-dialog-link">here</a> to start the synchronisation task.', array("url" => html::mark_clean(url::site("admin/maintenance/start/aws_s3_task::manual_sync?csrf=__CSRF__")))), "aws_s3_not_synced"); } } else { site_status::warning(t('Amazon S3 module needs configuration. Click <a href="%url">here</a> to go to the configuration page.', array("url" => html::mark_clean(url::site("admin/aws_s3")))), "aws_s3_not_configured"); } } module::set_version("aws_s3", 2); } log::info("aws_s3", "Module upgrade complete"); }
public function index() { $form = $this->_get_s3_form(); if (request::method() == "post") { access::verify_csrf(); if (($valid_form = $form->validate()) && ($s3_axs_correct = aws_s3::validate_access_details($_POST['access_key'], $_POST['secret_key'], $_POST['bucket_name']))) { // get variable values before changes so we can act on certain changes later $vars = array(); foreach (ORM::factory("var")->where("module_name", "=", "aws_s3")->find_all() as $var) { $vars[$var->name] = $var->value; } // set variables from $_POST into module::set_var() to save module::set_var("aws_s3", "enabled", isset($_POST['enabled']) ? true : false); module::set_var("aws_s3", "access_key", $_POST['access_key']); module::set_var("aws_s3", "secret_key", $_POST['secret_key']); module::set_var("aws_s3", "bucket_name", $_POST['bucket_name']); site_status::clear("aws_s3_not_configured"); module::set_var("aws_s3", "g3id", $_POST['g3id']); module::set_var("aws_s3", "url_str", $_POST['url_str']); module::set_var("aws_s3", "sig_exp", $_POST['sig_exp']); module::set_var("aws_s3", "use_ssl", isset($_POST['use_ssl']) ? true : false); module::set_var("aws_s3", "upload_thumbs", isset($_POST['upload_thumbs']) ? true : false); module::set_var("aws_s3", "upload_resizes", isset($_POST['upload_resizes']) ? true : false); module::set_var("aws_s3", "upload_fullsizes", isset($_POST['upload_fullsizes']) ? true : false); module::set_var("aws_s3", "s3_storage_only", isset($_POST['s3_storage_only']) ? true : false); // post option processing // if (module::get_var("aws_s3", "s3_storage_only") && !module::get_var("aws_s3", "enabled")) { // module::set_var("aws_s3", "enabled", true); // module::set_var("aws_s3", "upload_thumbs", true); // module::set_var("aws_s3", "upload_resizes", true); // module::set_var("aws_s3", "upload_fullsizes", true); // } // if (module::get_var("aws_s3", "s3_storage_only") && !$vars['s3_storage_only']) { // // content needs remove from local storage as it wasn't switched on before this point. // if (!module::get_var("aws_s3", "synced")) { // // force a sync between local storage and S3, as we're about to remove content from local storage. // } // } // else if (!module::get_var("aws_s3", "s3_storage_only") && $vars['s3_storage_only']) { // // content needs to be downloaded from s3 as it was just switched off. at this point, // // we shouldn't actually have a copy of the gallery content locally. // } if (module::get_var("aws_s3", "enabled") && !module::get_var("aws_s3", "synced", false)) { if (aws_s3::can_schedule()) { // i can schedule this task aws_s3::schedule_full_sync2(); site_status::warning("Your site has been scheduled for full Amazon S3 re-synchronisation. This message will clear when this has been completed.", "aws_s3_not_synced"); } else { // i CAN'T schedule it.. site_status::warning(t('Your site has not been synchronised to Amazon S3. Until it has, your server will continue to serve image content to your visitors. Click <a href="%url" class="g-dialog-link">here</a> to start the synchronisation task.', array("url" => html::mark_clean(url::site("admin/maintenance/start/aws_s3_task::manual_sync?csrf=__CSRF__")))), "aws_s3_not_synced"); } } message::success(t("Settings have been saved")); url::redirect("admin/aws_s3"); } else { if (!$valid_form) { message::error(t("There was a problem with the submitted form. Please check your values and try again.")); } if (!$s3_axs_correct) { message::error(t("The Amazon S3 access details provided appear to be incorrect. Please check your values and try again.")); $form->aws_s3->access_key->add_error("invalid", true); $form->aws_s3->secret_key->add_error("invalid", true); $form->aws_s3->bucket_name->add_error("invalid", true); } } } $v = new Admin_View("admin.html"); $v->page_title = t("Amazon S3 Configuration"); $v->content = new View("admin_aws_s3.html"); $v->content->form = $form; $v->content->end = ""; echo $v; }