From 064da79bae985512c4f3073dc0fe424f6bbef63d Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Fri, 15 Sep 2017 10:48:01 -0400 Subject: [PATCH] Update InputfieldFile non-ajax upload mode to warn about file uploads that exceed the max upload size. --- wire/core/PagesType.php | 17 +++++++---- .../InputfieldFile/InputfieldFile.js | 16 ++++++++++ .../InputfieldFile/InputfieldFile.min.js | 2 +- .../InputfieldFile/InputfieldFile.module | 29 ++++++++++++++----- 4 files changed, 51 insertions(+), 13 deletions(-) diff --git a/wire/core/PagesType.php b/wire/core/PagesType.php index 25d3c064..2ca3e1d0 100644 --- a/wire/core/PagesType.php +++ b/wire/core/PagesType.php @@ -282,6 +282,8 @@ class PagesType extends Wire implements \IteratorAggregate, \Countable { if(empty($options['caller'])) { $caller = $this->className() . ".get($selectorString)"; $options['caller'] = $caller; + } else { + $caller = $options['caller']; } if(ctype_digit("$selectorString")) { @@ -547,10 +549,11 @@ class PagesType extends Wire implements \IteratorAggregate, \Countable { /** * Hook called just before a page is saved * - * #pw-hooker + * #pw-internal * * @param Page $page The page about to be saved * @return array Optional extra data to add to pages save query. + * @deprecated * */ public function ___saveReady(Page $page) { @@ -564,11 +567,12 @@ class PagesType extends Wire implements \IteratorAggregate, \Countable { * This is the same as Pages::save, except that it occurs before other save-related hooks (below), * Whereas Pages::save occurs after. In most cases, the distinction does not matter. * - * #pw-hooker + * #pw-internal * * @param Page $page The page that was saved * @param array $changes Array of field names that changed * @param array $values Array of values that changed, if values were being recorded, see Wire::getChanges(true) for details. + * @deprecated * */ public function ___saved(Page $page, array $changes = array(), $values = array()) { } @@ -576,9 +580,10 @@ class PagesType extends Wire implements \IteratorAggregate, \Countable { /** * Hook called when a new page has been added * - * #pw-hooker + * #pw-internal * * @param Page $page + * @deprecated * */ public function ___added(Page $page) { } @@ -586,9 +591,10 @@ class PagesType extends Wire implements \IteratorAggregate, \Countable { /** * Hook called when a page is about to be deleted, but before data has been touched * - * #pw-hooker + * #pw-internal * * @param Page $page + * @deprecated * */ public function ___deleteReady(Page $page) { } @@ -596,9 +602,10 @@ class PagesType extends Wire implements \IteratorAggregate, \Countable { /** * Hook called when a page and it's data have been deleted * - * #pw-hooker + * #pw-internal * * @param Page $page + * @deprecated * */ public function ___deleted(Page $page) { } diff --git a/wire/modules/Inputfield/InputfieldFile/InputfieldFile.js b/wire/modules/Inputfield/InputfieldFile/InputfieldFile.js index 278b07c3..6e5b4fcd 100755 --- a/wire/modules/Inputfield/InputfieldFile/InputfieldFile.js +++ b/wire/modules/Inputfield/InputfieldFile/InputfieldFile.js @@ -129,6 +129,22 @@ $(document).ready(function() { var $list = $inputfield.find('.InputfieldFileList'); var maxFiles = parseInt($upload.find('.InputfieldFileMaxFiles').val()); var numFiles = $list.children('li').length + $upload.find('input[type=file]').length + 1; + var maxFilesize = parseInt($upload.attr('data-maxfilesize')); + + var abort = false; + $upload.find("input[type=file]").each(function() { + if(typeof this.files[0] !== 'undefined'){ + var size = this.files[0].size; + if(size > maxFilesize) { + ProcessWire.alert( + "File " + this.files[0].name +" is " + size + " bytes which exceeds max allowed size of " + maxFilesize + " bytes" + ); + $(this).val('').closest('.InputMask').removeClass('ui-state-disabled ui-state-active'); + abort = true; + } + } + }); + if(abort) return false; if(maxFiles > 0 && numFiles >= maxFiles) { // no more files allowed diff --git a/wire/modules/Inputfield/InputfieldFile/InputfieldFile.min.js b/wire/modules/Inputfield/InputfieldFile/InputfieldFile.min.js index a082b8f7..a58d2ec3 100644 --- a/wire/modules/Inputfield/InputfieldFile/InputfieldFile.min.js +++ b/wire/modules/Inputfield/InputfieldFile/InputfieldFile.min.js @@ -1 +1 @@ -$(document).ready(function(){$(document).on("change",".InputfieldFileDelete input",function(){d($(this))}).on("dblclick",".InputfieldFileDelete",function(){var k=$(this).find("input");var j=$(this).parents(".InputfieldFileList").find(".InputfieldFileDelete input");if(k.is(":checked")){j.removeAttr("checked").change()}else{j.attr("checked","checked").change()}return false});function d(l){var j=l.parents(".InputfieldFileInfo");var k=l.closest(".InputfieldFile").hasClass("InputfieldItemListCollapse");if(l.is(":checked")){j.addClass("ui-state-error");if(!k){j.siblings(".InputfieldFileData").slideUp("fast")}}else{j.removeClass("ui-state-error");if(!k){j.siblings(".InputfieldFileData").slideDown("fast")}}}function i(j){j.each(function(){var l=$(this);var m=l.children("li").length;if(l.closest(".InputfieldRenderValueMode").length){return}var k=l.closest(".Inputfield");if(m<2){if(m==0){k.addClass("InputfieldFileEmpty").removeClass("InputfieldFileMultiple InputfieldFileSingle")}else{k.addClass("InputfieldFileSingle").removeClass("InputfieldFileEmpty InputfieldFileMultiple")}return}else{l.closest(".Inputfield").removeClass("InputfieldFileSingle InputfieldFileEmpty").addClass("InputfieldFileMultiple")}l.sortable({start:function(o,n){n.item.children(".InputfieldFileInfo").addClass("ui-state-highlight")},stop:function(o,n){$(this).children("li").each(function(p){$(this).find(".InputfieldFileSort").val(p)});n.item.children(".InputfieldFileInfo").removeClass("ui-state-highlight");k.addClass("InputfieldFileJustSorted InputfieldStateChanged");setTimeout(function(){k.removeClass("InputfieldFileJustSorted")},500)}})}).find(".ui-widget-header, .ui-state-default").hover(function(){$(this).addClass("ui-state-hover")},function(){$(this).removeClass("ui-state-hover")})}function f(){$("body").addClass("ie-no-drop");$(document).on("change",".InputfieldFileUpload input[type=file]",function(){var m=$(this);var t=m.closest(".InputMask");if(m.val().length>1){t.addClass("ui-state-disabled")}else{t.removeClass("ui-state-disabled")}if(t.next(".InputMask").length>0){return}var j=m.closest(".InputfieldFile");var o=m.closest(".InputfieldFileUpload");var n=j.find(".InputfieldFileList");var s=parseInt(o.find(".InputfieldFileMaxFiles").val());var l=n.children("li").length+o.find("input[type=file]").length+1;if(s>0&&l>=s){}else{o.find(".InputMask").not(":last").each(function(){var u=$(this);if(u.find("input[type=file]").val()<1){u.remove()}});var r=t.clone().removeClass("ui-state-disabled");var q=r.find("input[type=file]");q.attr("id",q.attr("id")+"-");q.val("");r.insertAfter(t);r.css("margin-left","0.5em").removeClass("ui-state-active")}var k=m.val();var p=k.lastIndexOf("/");if(p===-1){p=k.lastIndexOf("\\")}k=k.substring(p+1);t.find(".ui-button-text").text(k).prepend("");t.removeClass("ui-state-active")})}function b(k){if(k.length>0){var j=k.find(".InputfieldFileUpload")}else{var j=$(".InputfieldFileUpload")}j.closest(".InputfieldContent").each(function(m){if($(this).hasClass("InputfieldFileInit")){return}l($(this),m);$(this).addClass("InputfieldFileInit")});function l(t,B){var s=t.parents("form");var m=t.closest(".InputfieldRepeaterItem");var p=m.length?m.attr("data-editUrl"):s.attr("action");p+=(p.indexOf("?")>-1?"&":"?")+"InputfieldFileAjax=1";var F=s.find("input._post_token");var r=F.attr("name");var w=F.val();var D=t.find(".InputfieldFileUpload");var o=D.data("fieldname");o=o.slice(0,-2);var E=D.data("extensions").toLowerCase();var A=D.data("maxfilesize");var v=t.find("input[type=file]").get(0);var u=t.get(0);var n=t.find(".InputfieldFileList");if(n.size()<1){n=$("");t.prepend(n);t.parent(".Inputfield").addClass("InputfieldFileEmpty")}var C=n.get(0);var x=parseInt(t.find(".InputfieldFileMaxFiles").val());n.children().addClass("InputfieldFileItemExisting");t.find(".AjaxUploadDropHere").show();var y=null;function q(I){var L=$('
  • '),K=$('
    '),J=$('
    '),M,N,P,O;K.append(J);L.append(K);P=new XMLHttpRequest();P.upload.addEventListener("progress",function(Q){if(Q.lengthComputable){var R=(Q.loaded/Q.total)*100;J.width(R+"%");if(R>4){J.html(""+parseInt(R)+"%")}$("body").addClass("pw-uploading")}else{}},false);P.addEventListener("load",function(){P.getAllResponseHeaders();var W=$.parseJSON(P.responseText);if(W.error!==undefined){W=[W]}for(var U=0;U0){T.slideUp("fast",function(){T.remove()})}}var ab=t.find("input[type=file]");if(ab.val()){ab.replaceWith(ab.clone(true))}var Y=$(R.markup);Y.hide();if(R.overwrite){var aa=Y.find(".InputfieldFileName").text();var ac=null;n.children(".InputfieldFileItemExisting").each(function(){if(ac===null&&$(this).find(".InputfieldFileName").text()==aa){ac=$(this)}});if(ac!==null){var X=Y.find(".InputfieldFileInfo");var Q=Y.find(".InputfieldFileLink");var S=ac.find(".InputfieldFileInfo");var Z=ac.find(".InputfieldFileLink");S.html(X.html()+"");Z.html(Q.html());ac.addClass("InputfieldFileItemExisting");ac.effect("highlight",500)}else{n.append(Y);Y.slideDown();Y.addClass("InputfieldFileItemExisting")}}else{n.append(Y);Y.slideDown()}}}L.remove();if(y){clearTimeout(y)}y=setTimeout(function(){$("body").removeClass("pw-uploading");if(x!=1&&!n.is(".ui-sortable")){i(n)}n.trigger("AjaxUploadDone")},500)},false);P.open("POST",p,true);P.setRequestHeader("X-FILENAME",encodeURIComponent(I.name));P.setRequestHeader("X-FIELDNAME",o);P.setRequestHeader("Content-Type","application/octet-stream");P.setRequestHeader("X-"+r,w);P.setRequestHeader("X-REQUESTED-WITH","XMLHttpRequest");P.send(I);O=" "+I.name+' • '+parseInt(I.size/1024,10)+" kb";L.find("p.ui-widget-header").html(O);n.append(L);var G=n.closest(".Inputfield");G.addClass("InputfieldStateChanged");var H=G.find(".InputfieldFileItem").length;if(H==1){G.removeClass("InputfieldFileEmpty").removeClass("InputfieldFileMultiple").addClass("InputfieldFileSingle")}else{if(H>1){G.removeClass("InputfieldFileEmpty").removeClass("InputfieldFileSingle").addClass("InputfieldFileMultiple")}}}function z(I){function J(L,M){return'
  •   '+L+' • '+M+"

  • "}if(typeof I!=="undefined"){for(var H=0,G=I.length;HA&&A>2000000){n.append(J(I[H].name,"Filesize "+parseInt(I[H].size/1024,10)+" kb is too big. Maximum allowed is "+parseInt(A/1024,10)+" kb"))}else{q(I[H])}}if(x==1){break}}}else{C.innerHTML="No support for the File API in this web browser"}}v.addEventListener("change",function(G){z(this.files);G.preventDefault();G.stopPropagation();this.value=""},false);u.addEventListener("dragleave",function(){$(this).removeClass("ui-state-hover");$(this).closest(".Inputfield").removeClass("pw-drag-in-file")},false);u.addEventListener("dragenter",function(){$(this).addClass("ui-state-hover");$(this).closest(".Inputfield").addClass("pw-drag-in-file")},false);u.addEventListener("dragover",function(G){if(!$(this).is("ui-state-hover")){$(this).addClass("ui-state-hover");$(this).closest(".Inputfield").addClass("pw-drag-in-file")}G.preventDefault();G.stopPropagation()},false);u.addEventListener("drop",function(G){z(G.dataTransfer.files);$(this).removeClass("ui-state-hover").closest(".Inputfield").removeClass("pw-drag-in-file");G.preventDefault();G.stopPropagation()},false)}}function g(j){j.each(function(){var q=$(this);var o=q.find("input.InputfieldFileTagsInput:not(.selectized)");var m=q.find("input.InputfieldFileTagsSelect:not(.selectized)");if(o.length){o.selectize({plugins:["remove_button","drag_drop"],delimiter:" ",persist:false,createOnBlur:true,submitOnReturn:false,create:function(n){return{value:n,text:n}}})}if(m.length){if(!q.hasClass("Inputfield")){q=q.closest(".Inputfield")}var r=q.attr("data-configName");var p=ProcessWire.config[r];var l=[];for(var s=0;s"+n(t.value)+""},option:function(t,n){return"
    "+n(t.value)+"
    "}}})}})}i($(".InputfieldFileList"));g($(".InputfieldFileHasTags"));var a=false;if(window.File&&window.FileList&&window.FileReader&&($("#PageIDIndicator").length>0||$(".InputfieldAllowAjaxUpload").length>0)){b("");a=true}else{f()}var c=767;var h=false;var e=function(){if(!a){return}$(".AjaxUploadDropHere").each(function(){var j=$(this);if(j.parent().width()<=c){j.hide()}else{j.show()}});h=false};if(a){$(window).resize(function(){if(h){return}h=true;setTimeout(e,1000)}).resize();$(document).on("AjaxUploadDone",".InputfieldFileHasTags",function(j){g($(this))})}$(document).on("reloaded",".InputfieldHasFileList",function(j){i($(this).find(".InputfieldFileList"));b($(this));g($(this));if(a){e()}})}); \ No newline at end of file +$(document).ready(function(){$(document).on("change",".InputfieldFileDelete input",function(){d($(this))}).on("dblclick",".InputfieldFileDelete",function(){var k=$(this).find("input");var j=$(this).parents(".InputfieldFileList").find(".InputfieldFileDelete input");if(k.is(":checked")){j.removeAttr("checked").change()}else{j.attr("checked","checked").change()}return false});function d(l){var j=l.parents(".InputfieldFileInfo");var k=l.closest(".InputfieldFile").hasClass("InputfieldItemListCollapse");if(l.is(":checked")){j.addClass("ui-state-error");if(!k){j.siblings(".InputfieldFileData").slideUp("fast")}}else{j.removeClass("ui-state-error");if(!k){j.siblings(".InputfieldFileData").slideDown("fast")}}}function i(j){j.each(function(){var l=$(this);var m=l.children("li").length;if(l.closest(".InputfieldRenderValueMode").length){return}var k=l.closest(".Inputfield");if(m<2){if(m==0){k.addClass("InputfieldFileEmpty").removeClass("InputfieldFileMultiple InputfieldFileSingle")}else{k.addClass("InputfieldFileSingle").removeClass("InputfieldFileEmpty InputfieldFileMultiple")}return}else{l.closest(".Inputfield").removeClass("InputfieldFileSingle InputfieldFileEmpty").addClass("InputfieldFileMultiple")}l.sortable({start:function(o,n){n.item.children(".InputfieldFileInfo").addClass("ui-state-highlight")},stop:function(o,n){$(this).children("li").each(function(p){$(this).find(".InputfieldFileSort").val(p)});n.item.children(".InputfieldFileInfo").removeClass("ui-state-highlight");k.addClass("InputfieldFileJustSorted InputfieldStateChanged");setTimeout(function(){k.removeClass("InputfieldFileJustSorted")},500)}})}).find(".ui-widget-header, .ui-state-default").hover(function(){$(this).addClass("ui-state-hover")},function(){$(this).removeClass("ui-state-hover")})}function f(){$("body").addClass("ie-no-drop");$(document).on("change",".InputfieldFileUpload input[type=file]",function(){var n=$(this);var u=n.closest(".InputMask");if(n.val().length>1){u.addClass("ui-state-disabled")}else{u.removeClass("ui-state-disabled")}if(u.next(".InputMask").length>0){return}var j=n.closest(".InputfieldFile");var p=n.closest(".InputfieldFileUpload");var o=j.find(".InputfieldFileList");var t=parseInt(p.find(".InputfieldFileMaxFiles").val());var l=o.children("li").length+p.find("input[type=file]").length+1;var v=parseInt(p.attr("data-maxfilesize"));var m=false;p.find("input[type=file]").each(function(){if(typeof this.files[0]!=="undefined"){var w=this.files[0].size;if(w>v){ProcessWire.alert("File "+this.files[0].name+" is "+w+" bytes which exceeds max allowed size of "+v+" bytes");$(this).val("").closest(".InputMask").removeClass("ui-state-disabled ui-state-active");m=true}}});if(m){return false}if(t>0&&l>=t){}else{p.find(".InputMask").not(":last").each(function(){var w=$(this);if(w.find("input[type=file]").val()<1){w.remove()}});var s=u.clone().removeClass("ui-state-disabled");var r=s.find("input[type=file]");r.attr("id",r.attr("id")+"-");r.val("");s.insertAfter(u);s.css("margin-left","0.5em").removeClass("ui-state-active")}var k=n.val();var q=k.lastIndexOf("/");if(q===-1){q=k.lastIndexOf("\\")}k=k.substring(q+1);u.find(".ui-button-text").text(k).prepend("");u.removeClass("ui-state-active")})}function b(k){if(k.length>0){var j=k.find(".InputfieldFileUpload")}else{var j=$(".InputfieldFileUpload")}j.closest(".InputfieldContent").each(function(m){if($(this).hasClass("InputfieldFileInit")){return}l($(this),m);$(this).addClass("InputfieldFileInit")});function l(t,B){var s=t.parents("form");var m=t.closest(".InputfieldRepeaterItem");var p=m.length?m.attr("data-editUrl"):s.attr("action");p+=(p.indexOf("?")>-1?"&":"?")+"InputfieldFileAjax=1";var F=s.find("input._post_token");var r=F.attr("name");var w=F.val();var D=t.find(".InputfieldFileUpload");var o=D.data("fieldname");o=o.slice(0,-2);var E=D.data("extensions").toLowerCase();var A=D.data("maxfilesize");var v=t.find("input[type=file]").get(0);var u=t.get(0);var n=t.find(".InputfieldFileList");if(n.size()<1){n=$("
      ");t.prepend(n);t.parent(".Inputfield").addClass("InputfieldFileEmpty")}var C=n.get(0);var x=parseInt(t.find(".InputfieldFileMaxFiles").val());n.children().addClass("InputfieldFileItemExisting");t.find(".AjaxUploadDropHere").show();var y=null;function q(I){var L=$('
    • '),K=$('
      '),J=$('
      '),M,N,P,O;K.append(J);L.append(K);P=new XMLHttpRequest();P.upload.addEventListener("progress",function(Q){if(Q.lengthComputable){var R=(Q.loaded/Q.total)*100;J.width(R+"%");if(R>4){J.html(""+parseInt(R)+"%")}$("body").addClass("pw-uploading")}else{}},false);P.addEventListener("load",function(){P.getAllResponseHeaders();var W=$.parseJSON(P.responseText);if(W.error!==undefined){W=[W]}for(var U=0;U0){T.slideUp("fast",function(){T.remove()})}}var ab=t.find("input[type=file]");if(ab.val()){ab.replaceWith(ab.clone(true))}var Y=$(R.markup);Y.hide();if(R.overwrite){var aa=Y.find(".InputfieldFileName").text();var ac=null;n.children(".InputfieldFileItemExisting").each(function(){if(ac===null&&$(this).find(".InputfieldFileName").text()==aa){ac=$(this)}});if(ac!==null){var X=Y.find(".InputfieldFileInfo");var Q=Y.find(".InputfieldFileLink");var S=ac.find(".InputfieldFileInfo");var Z=ac.find(".InputfieldFileLink");S.html(X.html()+"");Z.html(Q.html());ac.addClass("InputfieldFileItemExisting");ac.effect("highlight",500)}else{n.append(Y);Y.slideDown();Y.addClass("InputfieldFileItemExisting")}}else{n.append(Y);Y.slideDown()}}}L.remove();if(y){clearTimeout(y)}y=setTimeout(function(){$("body").removeClass("pw-uploading");if(x!=1&&!n.is(".ui-sortable")){i(n)}n.trigger("AjaxUploadDone")},500)},false);P.open("POST",p,true);P.setRequestHeader("X-FILENAME",encodeURIComponent(I.name));P.setRequestHeader("X-FIELDNAME",o);P.setRequestHeader("Content-Type","application/octet-stream");P.setRequestHeader("X-"+r,w);P.setRequestHeader("X-REQUESTED-WITH","XMLHttpRequest");P.send(I);O=" "+I.name+' • '+parseInt(I.size/1024,10)+" kb";L.find("p.ui-widget-header").html(O);n.append(L);var G=n.closest(".Inputfield");G.addClass("InputfieldStateChanged");var H=G.find(".InputfieldFileItem").length;if(H==1){G.removeClass("InputfieldFileEmpty").removeClass("InputfieldFileMultiple").addClass("InputfieldFileSingle")}else{if(H>1){G.removeClass("InputfieldFileEmpty").removeClass("InputfieldFileSingle").addClass("InputfieldFileMultiple")}}}function z(I){function J(L,M){return'
    •   '+L+' • '+M+"

    • "}if(typeof I!=="undefined"){for(var H=0,G=I.length;HA&&A>2000000){n.append(J(I[H].name,"Filesize "+parseInt(I[H].size/1024,10)+" kb is too big. Maximum allowed is "+parseInt(A/1024,10)+" kb"))}else{q(I[H])}}if(x==1){break}}}else{C.innerHTML="No support for the File API in this web browser"}}v.addEventListener("change",function(G){z(this.files);G.preventDefault();G.stopPropagation();this.value=""},false);u.addEventListener("dragleave",function(){$(this).removeClass("ui-state-hover");$(this).closest(".Inputfield").removeClass("pw-drag-in-file")},false);u.addEventListener("dragenter",function(){$(this).addClass("ui-state-hover");$(this).closest(".Inputfield").addClass("pw-drag-in-file")},false);u.addEventListener("dragover",function(G){if(!$(this).is("ui-state-hover")){$(this).addClass("ui-state-hover");$(this).closest(".Inputfield").addClass("pw-drag-in-file")}G.preventDefault();G.stopPropagation()},false);u.addEventListener("drop",function(G){z(G.dataTransfer.files);$(this).removeClass("ui-state-hover").closest(".Inputfield").removeClass("pw-drag-in-file");G.preventDefault();G.stopPropagation()},false)}}function g(j){j.each(function(){var q=$(this);var o=q.find("input.InputfieldFileTagsInput:not(.selectized)");var m=q.find("input.InputfieldFileTagsSelect:not(.selectized)");if(o.length){o.selectize({plugins:["remove_button","drag_drop"],delimiter:" ",persist:false,createOnBlur:true,submitOnReturn:false,create:function(n){return{value:n,text:n}}})}if(m.length){if(!q.hasClass("Inputfield")){q=q.closest(".Inputfield")}var r=q.attr("data-configName");var p=ProcessWire.config[r];var l=[];for(var s=0;s"+n(t.value)+""},option:function(t,n){return"
      "+n(t.value)+"
      "}}})}})}i($(".InputfieldFileList"));g($(".InputfieldFileHasTags"));var a=false;if(window.File&&window.FileList&&window.FileReader&&($("#PageIDIndicator").length>0||$(".InputfieldAllowAjaxUpload").length>0)){b("");a=true}else{f()}var c=767;var h=false;var e=function(){if(!a){return}$(".AjaxUploadDropHere").each(function(){var j=$(this);if(j.parent().width()<=c){j.hide()}else{j.show()}});h=false};if(a){$(window).resize(function(){if(h){return}h=true;setTimeout(e,1000)}).resize();$(document).on("AjaxUploadDone",".InputfieldFileHasTags",function(j){g($(this))})}$(document).on("reloaded",".InputfieldHasFileList",function(j){i($(this).find(".InputfieldFileList"));b($(this));g($(this));if(a){e()}})}); \ No newline at end of file diff --git a/wire/modules/Inputfield/InputfieldFile/InputfieldFile.module b/wire/modules/Inputfield/InputfieldFile/InputfieldFile.module index f107700e..d1fa6be6 100644 --- a/wire/modules/Inputfield/InputfieldFile/InputfieldFile.module +++ b/wire/modules/Inputfield/InputfieldFile/InputfieldFile.module @@ -184,26 +184,41 @@ class InputfieldFile extends Inputfield implements InputfieldItemList, Inputfiel * */ public function setMaxFilesize($filesize) { + $max = $this->strToBytes($filesize); + $phpMax = $this->strToBytes(ini_get('upload_max_filesize')); + if($phpMax < $max) $max = $phpMax; + $this->maxFilesize = $max; + return $this; + } + + /** + * Convert string like "32M" to bytes (integer) + * + * @param string|int $filesize + * @return int + * + */ + protected function strToBytes($filesize) { if(ctype_digit("$filesize")) { - $this->maxFilesize = (int) $filesize; + $bytes = (int) $filesize; } else { $filesize = rtrim($filesize, 'bB'); // convert mb=>m, gb=>g, kb=>k $last = strtolower(substr($filesize, -1)); if(ctype_alpha($last)) $filesize = rtrim($filesize, $last); $filesize = (int) $filesize; if($last == 'g') { - $this->maxFilesize = (($filesize * 1024) * 1024) * 1024; + $bytes = (($filesize * 1024) * 1024) * 1024; } else if($last == 'm') { - $this->maxFilesize = ($filesize * 1024) * 1024; + $bytes = ($filesize * 1024) * 1024; } else if($last == 'k') { - $this->maxFilesize = $filesize * 1024; + $bytes = $filesize * 1024; } else if($filesize > 0) { - $this->maxFilesize = $filesize; + $bytes = $filesize; } else { - $this->maxFilesize = (5 * 1024) * 1024; + $bytes = (5 * 1024) * 1024; } } - return $this; + return $bytes; } /**