diff --git a/include/ajax.config.php b/include/ajax.config.php index 398b6dccdd151c205a32b307a664f764db92d608..2a01e284071ca6122024ffc78c390759f3b48467 100644 --- a/include/ajax.config.php +++ b/include/ajax.config.php @@ -24,8 +24,6 @@ class ConfigAjaxAPI extends AjaxController { $config=array( 'lock_time' => ($cfg->getLockTime()*3600), - 'file_types' => $cfg->getAllowedFileTypes(), - 'max_file_size' => (int) $cfg->getMaxFileSize(), 'max_file_uploads'=> (int) $cfg->getStaffMaxFileUploads() ); return $this->json_encode($config); diff --git a/js/jquery.multifile.js b/js/jquery.multifile.js index 9b9a23b7d47065e1ecdea827f4b4d2cc05574dc6..0c0dd4a1cc4fa75e59a0bc232acde768dede0b60 100644 --- a/js/jquery.multifile.js +++ b/js/jquery.multifile.js @@ -3,7 +3,9 @@ Multifile plugin that allows users to upload multiple files at once in unobstructive manner - cleaner interface. - Allows limiting number of files and file type(s) using file extension. + Allows limiting number of files + Whitelist file type(s) using file extension + Limit file sizes. NOTE: * Files are not uploaded until the form is submitted @@ -50,7 +52,21 @@ if(fObj.data('files')>=settings.max_uploads || (fObj.data('files')+file.count)>settings.max_uploads) { alert('You have reached the maximum number of files ('+ settings.max_uploads+') allowed per upload'); - } else if($.fn.multifile.checkFileTypes(file, settings.allowedFileTypes)) { + } else if(!$.fn.multifile.checkFileTypes(file, settings.allowedFileTypes)) { + var msg = 'Selected file type is NOT allowed'; + if(file.count>1) + msg = 'File type of one or more of the selected files is NOT allowed'; + + alert('Error: '+msg); + $this.replaceWith(new_input); + } else if(!$.fn.multifile.checkFileSize(file, settings.max_file_size)) { + var msg = 'Selected file exceeds allowed size'; + if(file.count>1) + msg = 'File size of one or more of the selected files exceeds allowed size'; + + alert('Error: '+msg); + $this.replaceWith(new_input); + } else { $this.hide(); settings @@ -61,15 +77,6 @@ fObj.data('files', fObj.data('files')+file.count); if(fObj.data('files')<settings.max_uploads) $this.after(new_input); - - } else { - var msg = 'Selected file type is NOT allowed'; - if(file.count>1) - msg = 'File type of one or more of the selected files is NOT allowed'; - - alert('Error: '+msg); - - $this.replaceWith(new_input); } } @@ -126,6 +133,20 @@ if(filenames[i] && $.inArray('.'+filenames[i].split('.').pop(), allowedFileTypes) == -1) return false; + return true; + }; + + $.fn.multifile.checkFileSize = function(file, MaxFileSize) { + + //Size info not available or max file is not set (let server-side handle it). + if(!MaxFileSize || !file.size) + return true; + + var filesizes = $.map(file.size.split(','), $.trim); + for (var i = 0, _len = filesizes.length; i < _len; i++) + if(filesizes[i] > MaxFileSize) + return false; + return true; }; @@ -150,16 +171,20 @@ file.count = 1; // check for HTML5 FileList support if ( !!global.FileList ) { - if ( input.files.length == 1 ) + if ( input.files.length == 1 ) { file.name = input.files[0].name; - else { //Multi-select + file.size = '' + input.files[0].size; + } else { //Multi-select // We do this in order to support `multiple` files. // You can't display them separately because they // belong to only one file input. It is impossible // to remove just one of the files. file.name = input.files[0].name; - for (var i = 1, _len = input.files.length; i < _len; i++) + file.size = '' + input.files[0].size; + for (var i = 1, _len = input.files.length; i < _len; i++) { file.name += ', ' + input.files[i].name; + file.size += ', ' + input.files[i].size; + } file.count = i; } @@ -173,6 +198,7 @@ //Default options $.fn.multifile.defaults = { max_uploads: 1, - file_types: '.*' + file_types: '.*', + max_file_size: 0 }; })(jQuery, this); diff --git a/js/osticket.js b/js/osticket.js index ceca388f0d15339967933876f29f43688d5854cf..4a0e87b030c0f0ebc26cc21521cf0586acff88bb 100644 --- a/js/osticket.js +++ b/js/osticket.js @@ -64,6 +64,7 @@ $(document).ready(function(){ $('.multifile').multifile({ container: '.uploads', max_uploads: ($config && $config.max_file_uploads)?$config.max_file_uploads:1, - file_types: ($config && $config.file_types)?$config.file_types:".*" + file_types: ($config && $config.file_types)?$config.file_types:".*", + max_file_size: ($config && $config.max_file_size)?$config.max_file_size:0 }); }); diff --git a/scp/js/scp.js b/scp/js/scp.js index 8ce35149ee3909130fa8d1a42ff202246ccb8981..aa80487bddfcf77353bbc5b3307e92b38c1ec37b 100644 --- a/scp/js/scp.js +++ b/scp/js/scp.js @@ -259,7 +259,8 @@ $(document).ready(function(){ $('.multifile').multifile({ container: '.uploads', max_uploads: ($config && $config.max_file_uploads)?$config.max_file_uploads:1, - file_types: ($config && $config.file_types)?$config.file_types:".*" + file_types: ($config && $config.file_types)?$config.file_types:".*", + max_file_size: ($config && $config.max_file_size)?$config.max_file_size:0 }); /* Datepicker */