mirror of
https://github.com/processwire/processwire.git
synced 2025-08-17 20:11:46 +02:00
Update InputfieldFile non-ajax upload mode to warn about file uploads that exceed the max upload size.
This commit is contained in:
@@ -282,6 +282,8 @@ class PagesType extends Wire implements \IteratorAggregate, \Countable {
|
|||||||
if(empty($options['caller'])) {
|
if(empty($options['caller'])) {
|
||||||
$caller = $this->className() . ".get($selectorString)";
|
$caller = $this->className() . ".get($selectorString)";
|
||||||
$options['caller'] = $caller;
|
$options['caller'] = $caller;
|
||||||
|
} else {
|
||||||
|
$caller = $options['caller'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ctype_digit("$selectorString")) {
|
if(ctype_digit("$selectorString")) {
|
||||||
@@ -547,10 +549,11 @@ class PagesType extends Wire implements \IteratorAggregate, \Countable {
|
|||||||
/**
|
/**
|
||||||
* Hook called just before a page is saved
|
* Hook called just before a page is saved
|
||||||
*
|
*
|
||||||
* #pw-hooker
|
* #pw-internal
|
||||||
*
|
*
|
||||||
* @param Page $page The page about to be saved
|
* @param Page $page The page about to be saved
|
||||||
* @return array Optional extra data to add to pages save query.
|
* @return array Optional extra data to add to pages save query.
|
||||||
|
* @deprecated
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function ___saveReady(Page $page) {
|
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),
|
* 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.
|
* 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 Page $page The page that was saved
|
||||||
* @param array $changes Array of field names that changed
|
* @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.
|
* @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()) { }
|
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
|
* Hook called when a new page has been added
|
||||||
*
|
*
|
||||||
* #pw-hooker
|
* #pw-internal
|
||||||
*
|
*
|
||||||
* @param Page $page
|
* @param Page $page
|
||||||
|
* @deprecated
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function ___added(Page $page) { }
|
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
|
* Hook called when a page is about to be deleted, but before data has been touched
|
||||||
*
|
*
|
||||||
* #pw-hooker
|
* #pw-internal
|
||||||
*
|
*
|
||||||
* @param Page $page
|
* @param Page $page
|
||||||
|
* @deprecated
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function ___deleteReady(Page $page) { }
|
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
|
* Hook called when a page and it's data have been deleted
|
||||||
*
|
*
|
||||||
* #pw-hooker
|
* #pw-internal
|
||||||
*
|
*
|
||||||
* @param Page $page
|
* @param Page $page
|
||||||
|
* @deprecated
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function ___deleted(Page $page) { }
|
public function ___deleted(Page $page) { }
|
||||||
|
@@ -129,6 +129,22 @@ $(document).ready(function() {
|
|||||||
var $list = $inputfield.find('.InputfieldFileList');
|
var $list = $inputfield.find('.InputfieldFileList');
|
||||||
var maxFiles = parseInt($upload.find('.InputfieldFileMaxFiles').val());
|
var maxFiles = parseInt($upload.find('.InputfieldFileMaxFiles').val());
|
||||||
var numFiles = $list.children('li').length + $upload.find('input[type=file]').length + 1;
|
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) {
|
if(maxFiles > 0 && numFiles >= maxFiles) {
|
||||||
// no more files allowed
|
// no more files allowed
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -184,26 +184,41 @@ class InputfieldFile extends Inputfield implements InputfieldItemList, Inputfiel
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function setMaxFilesize($filesize) {
|
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")) {
|
if(ctype_digit("$filesize")) {
|
||||||
$this->maxFilesize = (int) $filesize;
|
$bytes = (int) $filesize;
|
||||||
} else {
|
} else {
|
||||||
$filesize = rtrim($filesize, 'bB'); // convert mb=>m, gb=>g, kb=>k
|
$filesize = rtrim($filesize, 'bB'); // convert mb=>m, gb=>g, kb=>k
|
||||||
$last = strtolower(substr($filesize, -1));
|
$last = strtolower(substr($filesize, -1));
|
||||||
if(ctype_alpha($last)) $filesize = rtrim($filesize, $last);
|
if(ctype_alpha($last)) $filesize = rtrim($filesize, $last);
|
||||||
$filesize = (int) $filesize;
|
$filesize = (int) $filesize;
|
||||||
if($last == 'g') {
|
if($last == 'g') {
|
||||||
$this->maxFilesize = (($filesize * 1024) * 1024) * 1024;
|
$bytes = (($filesize * 1024) * 1024) * 1024;
|
||||||
} else if($last == 'm') {
|
} else if($last == 'm') {
|
||||||
$this->maxFilesize = ($filesize * 1024) * 1024;
|
$bytes = ($filesize * 1024) * 1024;
|
||||||
} else if($last == 'k') {
|
} else if($last == 'k') {
|
||||||
$this->maxFilesize = $filesize * 1024;
|
$bytes = $filesize * 1024;
|
||||||
} else if($filesize > 0) {
|
} else if($filesize > 0) {
|
||||||
$this->maxFilesize = $filesize;
|
$bytes = $filesize;
|
||||||
} else {
|
} else {
|
||||||
$this->maxFilesize = (5 * 1024) * 1024;
|
$bytes = (5 * 1024) * 1024;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $this;
|
return $bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user