From c3cda163adf8f98477ca5927272db562a16b9f29 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jun 28 2017 12:39:23 +0000 Subject: Support to upload multiple files when creating a new ticket and scan them With this commit we can select multiple files when creating a new ticket they will get uploaded and inserted into the content of the ticket as expected. We also fix scanning these attachments for Virus if this option is enabled. Fixes https://pagure.io/pagure/issue/2366 Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/templates/new_issue.html b/pagure/templates/new_issue.html index e03f36f..54dd49c 100644 --- a/pagure/templates/new_issue.html +++ b/pagure/templates/new_issue.html @@ -150,19 +150,14 @@ {% if authenticated and form %} $(document).ready(function() { // Set up the handler for the file input box. - $("#file-picker").on("change", function() { + $("#file-picker").on("change", function(evt) { + var files = evt.target.files; //doUpload("{{ form.csrf_token.current_token }}", this.files); var _txt = $("#issue_content").val(); if (_txt) { _txt += '\n'; } - var _loc = "{{ url_for('view_issue_raw_file', - repo=repo.name, - username=username, - namespace=repo.namespace, - filename='') }}" + this.file; - - $("#issue_content").val(_txt + ''); + $("#issue_content").val(_txt + '\n'.repeat(files.length)); }); // List username in @ drop-down diff --git a/pagure/ui/issues.py b/pagure/ui/issues.py index d7eaf13..76033a6 100644 --- a/pagure/ui/issues.py +++ b/pagure/ui/issues.py @@ -899,32 +899,38 @@ def new_issue(repo, username=None, namespace=None): ticketfolder=APP.config['TICKETS_FOLDER'], ) SESSION.commit() + # If there is a file attached, attach it. - filestream = flask.request.files.get('filestream') - if filestream and '' in issue.content: - new_filename = pagure.lib.add_attachment( - repo=repo, - issue=issue, - attachmentfolder=APP.config['ATTACHMENTS_FOLDER'], - user=user_obj, - filename=filestream.filename, - filestream=filestream.stream, - ) - # Replace the tag in the comment with the link - # to the actual image - filelocation = flask.url_for( - 'view_issue_raw_file', - repo=repo.name, - username=username, - namespace=repo.namespace, - filename=new_filename, - ) - new_filename = new_filename.split('-', 1)[1] - url = '[![%s](%s)](%s)' % ( - new_filename, filelocation, filelocation) - issue.content = issue.content.replace('', url) - SESSION.add(issue) - SESSION.commit() + form = pagure.forms.UploadFileForm() + if form.validate_on_submit(): + streams = flask.request.files.getlist('filestream') + n_img = issue.content.count('') + if n_img == len(streams): + for filestream in streams: + new_filename = pagure.lib.add_attachment( + repo=repo, + issue=issue, + attachmentfolder=APP.config['ATTACHMENTS_FOLDER'], + user=user_obj, + filename=filestream.filename, + filestream=filestream.stream, + ) + # Replace the tag in the comment with the + # link to the actual image + filelocation = flask.url_for( + 'view_issue_raw_file', + repo=repo.name, + username=username, + namespace=repo.namespace, + filename=new_filename, + ) + new_filename = new_filename.split('-', 1)[1] + url = '[![%s](%s)](%s)' % ( + new_filename, filelocation, filelocation) + issue.content = issue.content.replace( + '', url, 1) + SESSION.add(issue) + SESSION.commit() return flask.redirect(flask.url_for( '.view_issue', username=username, repo=repo.name,