diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 291b3ef525cb4c6860f94b6779202fe0da07461e..8f487b357465c01614287a9aca0cfb9c1e83935c 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -20,9 +20,28 @@ class Configuration implements ConfigurationInterface $treeBuilder = new TreeBuilder(); $rootNode = $treeBuilder->root('irstea_file_upload'); - // Here you should define the parameters that are allowed to - // configure your bundle. See the documentation linked above for - // more information on that topic. + $rootNode + ->children() + ->integerNode('max_chunk_size') + ->beforeNormalization() + ->ifString() + ->then(function($v) { + $int = intval($v); + if(strpos($v, "K")) { + return 1000*$int; + } + if(strpos($v, "M")) { + return 1000000*$int; + } + return $int; + }) + ->end() + ->defaultValue(0) + ->treatNullLike(0) + ->treatFalseLike(0) + ->min(0) + ->end() + ->end(); return $treeBuilder; } diff --git a/DependencyInjection/IrsteaFileUploadExtension.php b/DependencyInjection/IrsteaFileUploadExtension.php index d3f8b862c7b3905800706e3898cefdca46c853eb..248bdc2d6731a29aa3e77d1904062a529a75f8d6 100644 --- a/DependencyInjection/IrsteaFileUploadExtension.php +++ b/DependencyInjection/IrsteaFileUploadExtension.php @@ -20,6 +20,8 @@ class IrsteaFileUploadExtension extends Extension implements PrependExtensionInt $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader->load('services.yml'); + + $container->setParameter('irstea_file_upload.max_chunk_size', $config['max_chunk_size']); } /** diff --git a/Form/Type/FileUploadType.php b/Form/Type/FileUploadType.php index b4e0799cd8c492b13e139fd3b19aaf0b1f2870b2..d8a52259a07bbb1fe7a16074ba1c96b8c50ccf59 100644 --- a/Form/Type/FileUploadType.php +++ b/Form/Type/FileUploadType.php @@ -23,13 +23,11 @@ class FileUploadType extends AbstractType use \Irstea\ThemeBundle\Form\AbstractJQueryWidgetTrait; /** - * * @var Router */ private $router; /** - * * @var FileManagerInterface */ private $fileManager; @@ -37,18 +35,24 @@ class FileUploadType extends AbstractType /** * @var CsrfProviderInterface */ - protected $csrfProvider; + private $csrfProvider; + + /** + * @var int + */ + private $maxChunkSize; /** * * @param Router $router * @param FileManagerInterface $fileManager */ - public function __construct(Router $router, FileManagerInterface $fileManager, CsrfProviderInterface $csrfProvider) + public function __construct(Router $router, FileManagerInterface $fileManager, CsrfProviderInterface $csrfProvider, $maxChunkSize) { $this->router = $router; $this->fileManager = $fileManager; $this->csrfProvider = $csrfProvider; + $this->maxChunkSize = $maxChunkSize; } public function buildForm(FormBuilderInterface $builder, array $options) @@ -64,6 +68,16 @@ class FileUploadType extends AbstractType $view->vars['widget_attr']['data-create-url'] = $this->router->generate('file_upload_create'); $view->vars['csrfToken'] = $this->csrfProvider->generateCsrfToken(UploadController::CSRF_INTENTION); $view->vars['multiple'] = $options['multiple']; + if($options['max_chunk_size'] > 0) { + $view->vars['widget_attr']['data-max-chunk-size'] = $options['max_chunk_size']; + } + } + + public function setDefaultOptions(OptionsResolverInterface $resolver) + { + $this->setWidgetDefaultOptions($resolver); + $resolver->setDefaults(['max_chunk_size' => $this->maxChunkSize ?: 0]); + $resolver->setAllowedTypes(['max_chunk_size' => 'int']); } protected function getWidgetDefaults() @@ -77,7 +91,6 @@ class FileUploadType extends AbstractType 'bitrate_interval' => 512, 'progress_interval' => 100, 'recalculate_progress' => true, - 'max_chunk_size' => 1000000, 'sequential_uploads' => false, ]; } diff --git a/Resources/config/services.yml b/Resources/config/services.yml index ba76ea515941f40b4ea6a1e93b512b257c99694e..14b63a7084162e1b112188dc80d4041319c50d0d 100644 --- a/Resources/config/services.yml +++ b/Resources/config/services.yml @@ -7,6 +7,8 @@ parameters: irstea_file_upload.filesystem.name: irstea_file_upload + irstea_file_upload.max_chunk_size: 0 + services: # Le gestionnaire de fichiers @@ -37,6 +39,7 @@ services: - @router - @irstea_file_upload.file_manager - @form.csrf_provider + - %irstea_file_upload.max_chunk_size% tags: - { name: form.type, alias: file_upload } diff --git a/Resources/js/widget/file_upload.js b/Resources/js/widget/file_upload.js index ba1795a3ab8f2e7d8b3cb7abfccd6a9a63a02fcd..19d428eafb697ddd9971a918fc9608e1f2c34bd0 100644 --- a/Resources/js/widget/file_upload.js +++ b/Resources/js/widget/file_upload.js @@ -23,7 +23,6 @@ if(options.acceptFileTypes) { options.acceptFileTypes = new RegExp('^' + options.acceptFileTypes + '$'); - console.debug(options.acceptFileTypes); } var formatSize = function(size) { @@ -64,7 +63,6 @@ uploadTemplateId: null, downloadTemplateId: null, filesContainer: $this.find('.fileinput-entries'), - maxChunkSize: options.maxChunkSize || 1000000, uploadTemplate: function(data) { var rows = $(); $.each(data.files, function (index, file) {