Use max upload size from php config in frontend plupload js

This commit is contained in:
Lucas Bickel 2017-12-26 12:46:17 +01:00
parent 0327a750ad
commit c342aef031
3 changed files with 62 additions and 1 deletions

View File

@ -43,6 +43,15 @@ class PluploadController extends Zend_Controller_Action
$csrf_form = new Zend_Form();
$csrf_form->addElement($csrf_element);
$this->view->form = $csrf_form;
// get max upload files size in MiB for plupload js.
$uploadMaxSize = $this->file_upload_max_size() / 1024 / 1024;
if ($uploadMaxSize === 0) {
// fall back to old default behaviour if unlimited uploads are
// configured on the server side.
$uploadMaxSize = 500;
}
$this->view->uploadMaxSize = $uploadMaxSize;
}
public function uploadAction()
@ -116,4 +125,53 @@ class PluploadController extends Zend_Controller_Action
$this->view->iTotalRecords = $numTotalRecentUploads;
$this->view->files = SecurityHelper::htmlescape_recursive($uploadsArray);
}
/**
* get configured upload max size from php
*
* Pinched from Drupal: https://github.com/drupal/drupal/blob/4204b0b29a7318008f10765cf88114bf3ed21c32/core/includes/file.inc#L1099
*
* Drupal seems to be the only framework that does this somewhat the right
* way. I'm adding the method here since it's part of their core and I did
* not find an easy way to grab that thrrough composer in an isolated way.
*/
private function file_upload_max_size() {
static $max_size = -1;
if ($max_size < 0) {
// Start with post_max_size.
$max_size = $this->bytes_to_int(ini_get('post_max_size'));
// If upload_max_size is less, then reduce. Except if upload_max_size is
// zero, which indicates no limit.
$upload_max = $this->bytes_to_int(ini_get('upload_max_filesize'));
if ($upload_max > 0 && $upload_max < $max_size) {
$max_size = $upload_max;
}
}
return $max_size;
}
/**
* Pinched from Drupal: https://github.com/drupal/drupal/blob/4204b0b29a7318008f10765cf88114bf3ed21c32/core/lib/Drupal/Component/Utility/Bytes.php#L27
*
* This is the real point of importing the Drupal solution. They have done
* an implementation for figuring out what the user specified in the
* post_max_size and upload_max_size configuration. Sadly php does not
* support a nice way to get at the results of this config after it is
* parsed by the engine, hence the below hack.
*/
private function bytes_to_int($size) {
// Remove the non-unit characters from the size.
$unit = preg_replace('/[^bkmgtpezy]/i', '', $size);
// Remove the non-numeric characters from the size.
$size = preg_replace('/[^0-9\.]/', '', $size);
if ($unit) {
// Find the position of the unit in the ordered string which is the power
// of magnitude to multiply a kilobyte by.
return round($size * pow(1024, stripos('bkmgtpezy', $unit[0])));
} else {
return round($size);
}
}
}

View File

@ -3,6 +3,9 @@
font-size: 200px !important;
}
</style>
<script type="text/javascript">
var LIBRETIME_PLUPLOAD_MAX_FILE_SIZE = "<?php echo $this->uploadMaxSize; ?>";
</script>
<?php $upgradeLink = Application_Common_OsPath::getBaseDir() . "billing/upgrade"; ?>
<?php if ($this->quotaLimitReached) { ?>
<div class="errors quota-reached">

View File

@ -20,7 +20,7 @@ $(document).ready(function () {
acceptedFiles: acceptedMimeTypes.join(),
addRemoveLinks: true,
dictRemoveFile: $.i18n._("Remove"),
maxFilesize: 500, //Megabytes
maxFilesize:LIBRETIME_PLUPLOAD_MAX_FILE_SIZE, //Megabytes
init: function () {
this.on("sending", function (file, xhr, data) {
data.append("csrf_token", $("#csrf").val());