diff --git a/app/Controller/ProjectFileController.php b/app/Controller/ProjectFileController.php index a3e23f047..37f9cc9ea 100644 --- a/app/Controller/ProjectFileController.php +++ b/app/Controller/ProjectFileController.php @@ -21,7 +21,7 @@ class ProjectFileController extends BaseController $this->response->html($this->template->render('project_file/create', array( 'project' => $project, - 'max_size' => $this->helper->text->phpToBytes(get_upload_max_size()), + 'max_size' => get_upload_max_size(), ))); } diff --git a/app/Controller/TaskFileController.php b/app/Controller/TaskFileController.php index b3192b3a7..af5df33d8 100644 --- a/app/Controller/TaskFileController.php +++ b/app/Controller/TaskFileController.php @@ -40,7 +40,7 @@ class TaskFileController extends BaseController $this->response->html($this->template->render('task_file/create', array( 'task' => $task, - 'max_size' => $this->helper->text->phpToBytes(get_upload_max_size()), + 'max_size' => get_upload_max_size(), ))); } diff --git a/app/Helper/TextHelper.php b/app/Helper/TextHelper.php index e201e5216..17bfb1a88 100644 --- a/app/Helper/TextHelper.php +++ b/app/Helper/TextHelper.php @@ -71,29 +71,6 @@ class TextHelper extends Base return round(pow(1024, $base - floor($base)), $precision).$suffixes[(int)floor($base)]; } - /** - * Get the number of bytes from PHP size - * - * @param integer $val PHP size (example: 2M) - * @return integer - */ - public function phpToBytes($val) - { - $size = (int) substr($val, 0, -1); - $last = strtolower(substr($val, -1)); - - switch ($last) { - case 'g': - $size *= 1024; - case 'm': - $size *= 1024; - case 'k': - $size *= 1024; - } - - return $size; - } - /** * Return true if needle is contained in the haystack * diff --git a/app/Template/project_file/create.php b/app/Template/project_file/create.php index 74c5fa70b..28b80ce8b 100644 --- a/app/Template/project_file/create.php +++ b/app/Template/project_file/create.php @@ -9,7 +9,7 @@ 'labelDropzone' => t('Drag and drop your files here'), 'labelOr' => t('or'), 'labelChooseFiles' => t('choose files'), - 'labelOversize' => t('The maximum allowed file size is %sB.', $this->text->bytes($max_size)), + 'labelOversize' => $max_size > 0 ? t('The maximum allowed file size is %sB.', $this->text->bytes($max_size)) : null, 'labelSuccess' => t('All files have been uploaded successfully.'), 'labelCloseSuccess' => t('Close this window'), 'labelUploadError' => t('Unable to upload this file.'), diff --git a/app/Template/task_file/create.php b/app/Template/task_file/create.php index 41858eca7..22ee1b01c 100644 --- a/app/Template/task_file/create.php +++ b/app/Template/task_file/create.php @@ -9,7 +9,7 @@ 'labelDropzone' => t('Drag and drop your files here'), 'labelOr' => t('or'), 'labelChooseFiles' => t('choose files'), - 'labelOversize' => t('The maximum allowed file size is %sB.', $this->text->bytes($max_size)), + 'labelOversize' => $max_size > 0 ? t('The maximum allowed file size is %sB.', $this->text->bytes($max_size)) : null, 'labelSuccess' => t('All files have been uploaded successfully.'), 'labelCloseSuccess' => t('Close this window'), 'labelUploadError' => t('Unable to upload this file.'), diff --git a/app/Template/task_import/show.php b/app/Template/task_import/show.php index 342cfb761..c40793828 100644 --- a/app/Template/task_import/show.php +++ b/app/Template/task_import/show.php @@ -13,7 +13,9 @@ = $this->form->label(t('CSV File'), 'file') ?> = $this->form->file('file', $errors) ?> + 0): ?>
= t('Maximum size: ') ?>= is_integer($max_size) ? $this->text->bytes($max_size) : $max_size ?>
+ = $this->modal->submitButtons(array('submitLabel' => t('Import'))) ?> diff --git a/app/Template/user_import/show.php b/app/Template/user_import/show.php index 3b0e599c3..35eddc3a6 100644 --- a/app/Template/user_import/show.php +++ b/app/Template/user_import/show.php @@ -30,7 +30,9 @@ = $this->form->label(t('CSV File'), 'file') ?> = $this->form->file('file', $errors) ?> + 0): ?>= t('Maximum size: ') ?>= is_integer($max_size) ? $this->text->bytes($max_size) : $max_size ?>
+ = $this->modal->submitButtons(array('submitLabel' => t('Import'))) ?> diff --git a/app/functions.php b/app/functions.php index e31af246f..1e41b51de 100644 --- a/app/functions.php +++ b/app/functions.php @@ -212,7 +212,44 @@ function build_app_version($ref, $commit_hash) */ function get_upload_max_size() { - return min(ini_get('upload_max_filesize'), ini_get('post_max_size')); + $upload_max_filesize = convert_php_size_to_bytes(ini_get('upload_max_filesize')); + $post_max_size = convert_php_size_to_bytes(ini_get('post_max_size')); + + if ($post_max_size == 0) { + return $upload_max_filesize; + } + + if ($upload_max_filesize == 0) { + return $post_max_size; + } + + return min($post_max_size, $upload_max_filesize); +} + +/** + * Get the number of bytes from PHP size + * + * @param integer $value PHP size (example: 2M) + * @return integer + */ +function convert_php_size_to_bytes($value) +{ + // Remove the non-unit characters from the size + $unit = preg_replace('/[^bkmgtpezy]/i', '', $value); + + // Remove the non-numeric characters from the size + $size = preg_replace('/[^0-9\.]/', '', $value); + + switch (strtoupper($unit)) { + case 'G': + $size *= 1024; + case 'M': + $size *= 1024; + case 'K': + $size *= 1024; + } + + return $size; } /** diff --git a/assets/js/app.min.js b/assets/js/app.min.js index 3ad205574..faf00e25f 100644 --- a/assets/js/app.min.js +++ b/assets/js/app.min.js @@ -114,7 +114,7 @@ function showFiles(){if(files.length>0){KB.trigger('modal.enable');KB.dom(dropzo function buildFileInputElement(){return KB.dom('input').attr('id','file-input-element').attr('type','file').attr('name','files[]').attr('multiple',!0).on('change',onFileChange).hide().build()} function buildInnerDropzoneElement(){var dropzoneLinkElement=KB.dom('a').attr('href','#').text(options.labelChooseFiles).click(onClickFileBrowser).build();return KB.dom('div').attr('id','file-dropzone-inner').text(options.labelDropzone+' '+options.labelOr+' ').add(dropzoneLinkElement).build()} function buildDropzoneElement(){var dropzoneElement=KB.dom('div').attr('id','file-dropzone').add(buildInnerDropzoneElement()).build();dropzoneElement.ondragover=onDragOver;dropzoneElement.ondrop=onDrop;dropzoneElement.ondragover=onDragOver;return dropzoneElement} -function buildFileListItem(index){var isOversize=!1;var progressElement=KB.dom('progress').attr('id','file-progress-'+index).attr('value',0).build();var percentageElement=KB.dom('span').attr('id','file-percentage-'+index).text('(0%)').build();var deleteElement=KB.dom('span').attr('id','file-delete-'+index).html('').on('click',function(){files.splice(index,1);KB.find('#file-item-'+index).remove();showFiles()}).build();var itemElement=KB.dom('li').attr('id','file-item-'+index).add(deleteElement).add(progressElement).text(' '+files[index].name+' ').add(percentageElement);if(files[index].size>options.maxSize){itemElement.add(KB.dom('div').addClass('file-error').text(options.labelOversize).build());isOversize=!0} +function buildFileListItem(index){var isOversize=!1;var progressElement=KB.dom('progress').attr('id','file-progress-'+index).attr('value',0).build();var percentageElement=KB.dom('span').attr('id','file-percentage-'+index).text('(0%)').build();var deleteElement=KB.dom('span').attr('id','file-delete-'+index).html('').on('click',function(){files.splice(index,1);KB.find('#file-item-'+index).remove();showFiles()}).build();var itemElement=KB.dom('li').attr('id','file-item-'+index).add(deleteElement).add(progressElement).text(' '+files[index].name+' ').add(percentageElement);if(options.maxSize>0&&files[index].size>options.maxSize){itemElement.add(KB.dom('div').addClass('file-error').text(options.labelOversize).build());isOversize=!0} if(isOversize){KB.trigger('modal.disable')} return itemElement.build()} function buildFileListElement(){var fileListElement=KB.dom('ul').attr('id','file-list').build();for(var i=0;i