vendor/uvdesk/core-framework/Resources/views/Templates/attachment.html.twig line 1

Open in your IDE?
  1. <style>
        input.attachment {
            display: none;
        }
    </style>
    <script type="text/javascript">
        $(function () {
            var FileView = Backbone.View.extend({
                fileCounter: 0,
                max_post_size: {{ max_post_size }},
                max_file_uploads: {{ max_file_uploads }},
                upload_max_filesize: {{ upload_max_filesize }},
                el: '.attachment-block',
                events : {
                    'click .uv-file-label': 'createFileType',
                    'change .attachment': 'selectFile',
                    'click .uv-added-attachment span': 'removeFile',
                    'click .uv-field-message': 'removeError',
                },
                createFileType: function(e) {
                    this.removeError(e)
                    var currentElement = Backbone.$(e.currentTarget),
                        attachmentBlock = currentElement.parents('.attachment-block')
                    if (attachmentBlock.children('.uv-added-attachment').length + 1 > this.max_file_uploads) {
                        attachmentBlock.append(this.getDefaultErrorMessage())
                        return;
                    }
                    this.fileCounter += 1;
                    attachmentBlock.append('<div class="uv-added-attachment" style="display: none" id="file-' + this.fileCounter + '"><div class="uv-attachment"><input type="file" name="attachments[]" class="attachment" multiple="multiple"></div><span></span></div>')
                    $('#file-' + this.fileCounter).find('.attachment').trigger('click')
                },
                labelTemplate: _.template('<label class="file-name"><%- fileName %></label><br>'),
                selectFile: function(e) {
                    var currentElement = Backbone.$(e.currentTarget);
                    var attachmentBlock = currentElement.parents(".uv-added-attachment");
                    var isError = false;
                    
                    if (currentElement.length) {
                        files = currentElement[0].files; 
    
                        if (files.length) {
                            for (var i = 0; i < files.length; i++) {
                                var fileName = files[i].name;
                                
                                if (files[i].size > this.upload_max_filesize) {
                                    isError = true;
                                    break;
                                }
    
                                // Validating Form Size
                                var formSize = 0
                                var formData = new FormData(currentElement.parents('form')[0])
                                
                                for (var pair of formData.entries()) {
                                    if (pair[1] instanceof Blob) {
                                        formSize += pair[1].size
                                    } else {
                                        formSize += pair[1].length
                                    }
                                }
    
                                if (formSize > this.max_post_size) {
                                    isError = true
                                }
    
                                attachmentBlock.append(this.labelTemplate({'fileName': fileName}));
                            }
                        }
                    }
                    
                    if (isError) {
                        attachmentBlock.parents('.attachment-block').append(this.getDefaultErrorMessage())
                        attachmentBlock.remove()
                        return
                    }
    
                    attachmentBlock.show()
                },
                removeFile: function(e) {
                    this.removeError(e)
                    Backbone.$(e.currentTarget).parents('.uv-added-attachment').remove()
                },
                getDefaultErrorMessage: function() {
                    return '<span class="uv-field-message">You can send up to ' + Math.floor(this.upload_max_filesize/(1024*1024)) + ' MB in attachments. If you have more than one attachment, they can\'t add up to more than ' + Math.floor(this.max_post_size/(1024*1024))  + ' MB and ' + this.max_file_uploads + ' attachments in total.</span>'
                },
                removeError: function(e) {
                    Backbone.$(e.currentTarget).parents('.attachment-block').find('.uv-field-message').remove()
                }   
            });
            
            var fileView = new FileView();
        });
    </script>