From 5aea02ee820f8ec2e3c074e25ffefd03bf1c7948 Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Sat, 26 Apr 2008 06:39:23 +0000 Subject: [PATCH] Merged revisions 52392 via svnmerge from http://svn.silverstripe.com/open/modules/cms/branches/2.2.2 ........ r52392 | sminnee | 2008-04-09 18:00:12 +1200 (Wed, 09 Apr 2008) | 1 line Upgraded SWFUpload to improve CMS uploads ........ git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/cms/trunk@53499 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- code/AssetAdmin.php | 9 ++++-- javascript/CMSMain_upload.js | 23 ++++++++------ javascript/Upload.js | 59 ++++++++++++++++++------------------ 3 files changed, 50 insertions(+), 41 deletions(-) diff --git a/code/AssetAdmin.php b/code/AssetAdmin.php index 25df3daf..f508147a 100755 --- a/code/AssetAdmin.php +++ b/code/AssetAdmin.php @@ -132,7 +132,7 @@ class AssetAdmin extends LeftAndMain { */ function UploadForm() { - return new Form($this,'UploadForm', new FieldSet( + $form = new Form($this,'UploadForm', new FieldSet( new HiddenField("ID", "", $this->currentPageID()), // needed because the button-action is triggered outside the iframe new HiddenField("action_doUpload", "", "1"), @@ -151,6 +151,11 @@ class AssetAdmin extends LeftAndMain { ") ), new FieldSet( )); + + // Makes ajax easier + $form->disableSecurityToken(); + + return $form; } @@ -229,7 +234,7 @@ class AssetAdmin extends LeftAndMain { $sFileIDs = implode(',', $fileIDs); $sFileNames = implode(',', $fileNames); - + echo << /* IDs: $sFileIDs */ diff --git a/javascript/CMSMain_upload.js b/javascript/CMSMain_upload.js index d6dca3ee..5146011f 100644 --- a/javascript/CMSMain_upload.js +++ b/javascript/CMSMain_upload.js @@ -5,21 +5,24 @@ */ CMSMain_upload = Class.create(); CMSMain_upload.prototype = { - initialize: function() { - // Due to a bug in the flash plugin on Linux and Mac, we need at least version 9.0.64 to use SWFUpload - if(navigator.appVersion.indexOf("Mac") != -1 || navigator.appVersion.indexOf("X11") != -1 || navigator.appVersion.indexOf("Linux") != -1) { - pv = getFlashPlayerVersion(); - if(pv.major < 9 || (pv.major == 9 && pv.minor == 0 && pv.rev < 64)) { - return; - } + initialize: function() { + // We require flash 9 + pv = getFlashPlayerVersion(); + if(pv.major < 9) return; + + // Due to a bug in the flash plugin on Linux and Mac, we need at least version 9.0.64 to use SWFUpload + if(navigator.appVersion.indexOf("Mac") != -1 || navigator.appVersion.indexOf("X11") != -1 || navigator.appVersion.indexOf("Linux") != -1) { + if(pv.major == 9 && pv.minor == 0 && pv.rev < 64) return; } + + // If those 2 checks pass, we can provide upload capabilities to the user this.iframe = window.top.document.getElementById('AssetAdmin_upload'); this.onLoad(); }, onLoad: function() { this.upload = new Upload({ - fileUploadLimit : '6', + fileUploadLimit : '6', securityID : $('SecurityID').value, beginUploadOnQueue : false, fileQueued : this.uploadFileQueuedCallback.bind(this), @@ -175,7 +178,7 @@ CMSMain_upload.prototype = { }, uploadQueueCompleteCallback: function() { - eval(this.upload.getUploadMessage().replace('1',this.upload.getFilesUploaded())); + eval(this.upload.getUploadMessage().replace(/Uploaded 1 files/g,'Uploaded ' + this.upload.getFilesUploaded() + ' files')); } } -window.top.document.CMSMain_upload = CMSMain_upload; +window.top.document.CMSMain_upload = CMSMain_upload; diff --git a/javascript/Upload.js b/javascript/Upload.js index b1992b31..d67fe54b 100644 --- a/javascript/Upload.js +++ b/javascript/Upload.js @@ -29,7 +29,7 @@ Upload.prototype = { if(typeof params.fileCancelled != 'undefined') this.fileCancelled = params.fileCancelled; if(typeof params.fileComplete != 'undefined') this.fileComplete = params.fileComplete ; if(typeof params.queueComplete != 'undefined') this.queueComplete = params.queueComplete; - if(typeof params.buildUI != 'undefined') this.customBuildUI = params.buildUI; + if(typeof params.buildUI != 'undefined') this.customBuildUI = params.buildUI; if(typeof params.securityID != 'undefined') this.securityID = params.securityID; this.onLoad(); }, @@ -42,7 +42,7 @@ Upload.prototype = { path = this.getBasePath(); sessId = this.getSessionId();//Because flash doesn't send proper cookies, we need to set session id in URL. this.swfu = new SWFUpload({ - upload_target_url: path + '/assets/index/root?executeForm=UploadForm&SecurityID=' + this.securityID + '&PHPSESSID=' + sessId, // Relative to the SWF file + upload_url: path + 'admin/assets/index/root?executeForm=UploadForm&SecurityID=' + this.securityID + '&PHPSESSID=' + sessId, // Relative to the SWF file file_post_name: 'Files', file_size_limit : this.fileSizeLimit, file_types : this.fileTypes, @@ -53,15 +53,14 @@ Upload.prototype = { validate_files: false, file_queued_handler : this.uploadFileQueuedCallback.bind(this), - file_complete_handler : this.uploadFileCompleteCallback.bind(this), - file_progress_handler: this.uploadFileProgressCallback.bind(this), - queue_complete_handler : this.uploadQueueCompleteCallback.bind(this), + upload_success_handler : this.uploadFileCompleteCallback.bind(this), + upload_progress_handler: this.uploadFileProgressCallback.bind(this), error_handler : this.uploadErrorCallback.bind(this), file_validation_handler : Prototype.emptyFunction, file_cancelled_handler: Prototype.emptyFunction, - flash_url : 'jsparty/SWFUpload/SWFUpload.swf', // Relative to this file - ui_function: this.buildUI.bind(this), + flash_url : 'jsparty/SWFUpload/swfupload_f9.swf', // Relative to this file + swfupload_loaded_handler: this.buildUI.bind(this), debug: false }); }, @@ -73,8 +72,9 @@ Upload.prototype = { getBasePath: function() { var path = 'http://' + window.location.host + window.location.pathname; - if(path[path.length-1] == '/') path = path.substring(0,path.length-1); - return path; + + if(path.match(/^(.*\/)admin/i)) return RegExp.$1; + else return path; }, /** @@ -117,14 +117,26 @@ Upload.prototype = { * @param file object * @param servedData string */ - uploadFileCompleteCallback: function(file,serverData) { this.filesUploaded++; - var toEval = serverData.substr(serverData.indexOf('',''); - toEval = toEval.replace('',''); - this.uploadMessage = toEval; - this.fileComplete(file, serverData); + if(serverData) { + var toEval = serverData.substr(serverData.indexOf('',''); + toEval = toEval.replace('',''); + this.uploadMessage = toEval; + } + + this.fileComplete(file, serverData); + + // Run the next file in the queue, if there is one + if(this.swfu.getStats().files_queued > 0) this.startUpload(); + // Otherwise indicate that the queue is finished + else { + this.queueComplete(); + this.uploadInProgress = false; + this.filesUploaded = 0; + this.filesToUpload = 0; + } }, /** @@ -138,18 +150,7 @@ Upload.prototype = { this.uploadInProgress = true; this.fileProgress(file, bytes_complete); }, - - /** - * Called when whole queue has been uploaded or cancelled. - */ - - uploadQueueCompleteCallback: function() { - this.queueComplete(); - this.uploadInProgress = false; - this.filesUploaded = 0; - this.filesToUpload = 0; - }, - + /** * Called on error. * @param error_code int @@ -209,7 +210,7 @@ Upload.prototype = { */ browse: function() { - this.swfu.browse(); + this.swfu.selectFiles(); }, /** @@ -252,4 +253,4 @@ Upload.prototype = { isUploadInProgress: function() { return this.uploadInProgress; } -} +}