diff options
author | Bharat Mediratta <bharat@menalto.com> | 2009-05-27 15:07:27 -0700 |
---|---|---|
committer | Bharat Mediratta <bharat@menalto.com> | 2009-05-27 15:07:27 -0700 |
commit | 28b41056e3ea962dce1ad017a3c0a60252195e7a (patch) | |
tree | 82c11956bb13969e6c8ddeb39ccfce7ae70786ca /modules/gallery/views/simple_uploader.html.php | |
parent | 2e285cf3ecac742193457347ecb5c2d1121a1052 (diff) |
Restructure things so that the application is now just another module.
Kohana makes this type of transition fairly straightforward in that
all controllers/helpers/etc are still located in the cascading
filesystem without any extra effort, except that I've temporarily
added a hack to force modules/gallery into the module path.
Rename what's left of "core" to be "application" so that it conforms
more closely to the Kohana standard (basically, just
application/config/config.php which is the minimal thing that you need
in the application directory)
There's still considerable work left to be done here.
Diffstat (limited to 'modules/gallery/views/simple_uploader.html.php')
-rw-r--r-- | modules/gallery/views/simple_uploader.html.php | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/modules/gallery/views/simple_uploader.html.php b/modules/gallery/views/simple_uploader.html.php new file mode 100644 index 00000000..b6725c31 --- /dev/null +++ b/modules/gallery/views/simple_uploader.html.php @@ -0,0 +1,249 @@ +<?php defined("SYSPATH") or die("No direct script access.") ?> +<script type="text/javascript" src="<?= url::file("lib/swfupload/swfupload.js") ?>"></script> +<script type="text/javascript" src="<?= url::file("lib/swfupload/swfupload.queue.js") ?>"></script> + +<!-- hack to set the title for the dialog --> +<form id="gAddPhotosForm" action="<?= url::site("simple_uploader/finish") ?>"> + <fieldset> + <legend> <?= t("Add photos to %album_title", array("album_title" => $item->title)) ?> </legend> + </fieldset> +</form> + +<div id="gAddPhotos"> + <? if (ini_get("suhosin.session.encrypt")): ?> + <ul id="gMessage"> + <li class="gError"> + <?= t("Error: your server is configured to use the <a href=\"%encrypt_url\"><code>suhosin.session.encrypt</code></a> setting from <a href=\"%suhosin_url\">Suhosin</a>. You must disable this setting to upload photos.", + array("encrypt_url" => "http://www.hardened-php.net/suhosin/configuration.html#suhosin.session.encrypt", + "suhosin_url" => "http://www.hardened-php.net/suhosin/")) ?> + </li> + </ul> + <? endif ?> + + <p> + <?= t("Photos will be uploaded to album: ") ?> + </p> + <ul class="gBreadcrumbs"> + <? foreach ($item->parents() as $parent): ?> + <li> <?= $parent->title ?> </li> + <? endforeach ?> + <li class="active"> <?= $item->title ?> </li> + </ul> + + <p><?= t("Upload Queue") ?></p> + <div id="gAddPhotosCanvas" style="text-align: center;"> + <div id="gAddPhotosQueue"></div> + <div id="gEditPhotosQueue"></div> + <span id="gChooseFilesButtonPlaceholder"></span> + </div> + <button id="gUploadCancel" class="ui-state-default ui-corner-all" type="button" + onclick="swfu.cancelQueue();" + disabled="disabled"> + <?= t("Cancel all") ?> + </button> + + <!-- Proxy the done request back to our form, since its been ajaxified --> + <button class="ui-state-default ui-corner-all" onclick="$('#gAddPhotosForm').submit()"> + <?= t("Done") ?> + </button> +</div> + +<style> + #SWFUpload_0 { + margin-top: 100px; + } + #gAddPhotos .gBreadcrumbs { + border: 0; + margin: 0; + padding-left:10px; + } + #gAddPhotosCanvas { + border: 1px solid #CCCCCC; + margin: .5em 0 .5em 0; + width: 469px; + } + #gAddPhotos button { + margin-bottom: .5em; + float: right; + } + #gAddPhotos #gUploadCancel { + float: left; + } +</style> + +<script type="text/javascript"> + var swfu = new SWFUpload({ + flash_url : "<?= url::file("lib/swfupload/swfupload.swf") ?>", + upload_url: "<?= url::site("simple_uploader/add_photo/$item->id") ?>", + post_params: { + "g3sid": "<?= Session::instance()->id() ?>", + "user_agent": "<?= Input::instance()->server("HTTP_USER_AGENT") ?>", + "csrf": "<?= $csrf ?>" + }, + file_size_limit : "100 MB", + file_types : "*.gif;*.jpg;*.jpeg;*.png;*.flv;*.mp4;*.GIF;*.JPG;*.JPEG;*.PNG;*.FLV;*.MP4", + file_types_description : "<?= t("Photos and Movies") ?>", + file_upload_limit : 1000, + file_queue_limit : 0, + custom_settings : { }, + debug: false, + + // Button settings + button_image_url: "<?= url::file("themes/default/images/select-photos-backg.png") ?>", + button_width: "202", + button_height: "45", + button_placeholder_id: "gChooseFilesButtonPlaceholder", + button_text: '<span class="swfUploadFont">Select photos...</span>', + button_text_style: ".swfUploadFont { color: #2E6E9E; font-size: 16px; font-family: Lucida Grande,Lucida Sans,Arial,sans-serif; font-weight: bold; }", + button_text_left_padding: 30, + button_text_top_padding: 10, + + // The event handler functions are defined in handlers.js + file_queued_handler : file_queued, + file_queue_error_handler : file_queue_error, + file_dialog_complete_handler : file_dialog_complete, + upload_start_handler : upload_start, + upload_progress_handler : upload_progress, + upload_error_handler : upload_error, + upload_success_handler : upload_success, + upload_complete_handler : upload_complete, + queue_complete_handler : queue_complete + }); + + // @todo add support for cancelling individual uploads + function File_Progress(file) { + this.box = $("#" + file.id); + if (!this.box.length) { + $("#gAddPhotosQueue").append( + "<div class=\"box\" id=\"" + file.id + "\">" + + "<div class=\"title\"></div>" + + "<div class=\"status\"></div>" + + "<div class=\"progressbar\"></div></div>"); + this.box = $("#" + file.id); + } + this.title = this.box.find(".title"); + this.status = this.box.find(".status"); + this.progress_bar = this.box.find(".progressbar"); + this.progress_bar.progressbar(); + this.progress_bar.css("visibility", "hidden"); + } + + File_Progress.prototype.set_status = function(status_class, msg) { + this.box.removeClass("pending error uploading complete").addClass(status_class); + this.status.html(msg); + } + + function file_queued(file) { + var fp = new File_Progress(file); + fp.title.html(file.name); + fp.set_status("pending", "<?= t("Pending...") ?>"); + // @todo add cancel button to call this.cancelUpload(file.id) + } + + function file_queue_error(file, error_code, message) { + if (error_code === SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) { + alert("<?= t("You have attempted to queue too many files.") ?>"); + return; + } + + var fp = new File_Progress(file); + switch (error_code) { + case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT: + fp.set_status("error", "<?= t("File is too big.") ?>"); + break; + case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE: + fp.set_status("error", "<?= t("Cannot upload empty files.") ?>"); + break; + case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE: + fp.set_status("error", "<?= t("Invalid file type.") ?>"); + break; + default: + if (file !== null) { + fp.set_status("error", "<?= t("Unknown error") ?>"); + } + break; + } + } + + function file_dialog_complete(num_files_selected, num_files_queued) { + if (num_files_selected > 0) { + $("#gUploadCancel").enable(true); + } + + // Auto start the upload + this.startUpload(); + } + + function upload_start(file) { + // Do all file validation on the server side. Update the UI here because in Linux + // no uploadProgress events are called (limitation in the Linux Flash VM). + var fp = new File_Progress(file); + fp.title.html(file.name); + fp.set_status("uploading", "<?= t("Uploading...") ?>"); + return true; + // @todo add cancel button to call this.cancelUpload(file.id) + } + + function upload_progress(file, bytes_loaded, bytes_total) { + var percent = Math.ceil((bytes_loaded / bytes_total) * 100); + var fp = new File_Progress(file); + fp.set_status("uploading", "<?= t("Uploading...") ?>"); + fp.progress_bar.css("visibility", "visible"); + fp.progress_bar.progressbar("value", percent); + } + + function upload_success(file, serverData) { + var fp = new File_Progress(file); + fp.progress_bar.progressbar("value", 100); + fp.set_status("complete", "<?= t("Complete.") ?>"); + } + + function upload_error(file, error_code, message) { + var fp = new File_Progress(file); + switch (error_code) { + case SWFUpload.UPLOAD_ERROR.HTTP_ERROR: + fp.set_status("error", "<?= t("Upload error: ") ?>" + message); + break; + case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED: + fp.set_status("error", "<?= t("Upload failed") ?>"); + break; + case SWFUpload.UPLOAD_ERROR.IO_ERROR: + fp.set_status("error", "<?= t("Server error") ?>"); + break; + case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR: + fp.set_status("error", "<?= t("Security error") ?>"); + break; + case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED: + fp.set_status("error", "<?= t("Upload limit exceeded") ?>"); + break; + case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED: + fp.set_status("error", "<?= t("Failed validation. File skipped") ?>"); + break; + case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED: + // If there aren't any files left (they were all cancelled) disable the cancel button + if (this.getStats().files_queued === 0) { + $("#gUploadCancel").enable(false); + } + fp.set_status("error", "<?= t("Cancelled") ?>"); + break; + case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED: + fp.set_status("error", "<?= t("Stopped") ?>"); + break; + default: + fp.set_status("error", "<?= t("Unknown error: ") ?>" + error_code); + break; + } + } + + function upload_complete(file) { + if (this.getStats().files_queued === 0) { + $("#gUploadCancel").enable(false); + } + } + + // This event comes from the Queue Plugin + function queue_complete(num_files_uploaded) { + var status_msg = "<?= t("Uploaded: __COUNT__") ?>"; + $("#gUploadStatus").html(status_msg.replace("__COUNT__", num_files_uploaded)); + } +</script> |