From 2e4a6953c4c9bb04bdc4b0e9cc52413035d16ff9 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Tue, 9 Oct 2012 15:28:24 +0200 Subject: [PATCH] [IMP] mail: attachment bzr revid: chm@openerp.com-20121009132824-dsl7f02hxfpypc0w --- addons/mail/mail_message.py | 4 +- addons/mail/static/src/css/mail.css | 18 ++++ addons/mail/static/src/js/mail.js | 135 ++++++++++++++++++++++------ addons/mail/static/src/xml/mail.xml | 18 +++- 4 files changed, 144 insertions(+), 31 deletions(-) diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index 89981b99389..4595dfdfb88 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -349,10 +349,10 @@ class mail_message(osv.Model): attachment = self.pool.get('ir.attachment') attachment_ids = attachment.search(cr, uid, [('res_model','=',''),('create_uid','=',uid)]) if len(attachment_ids): - attachment_list = [{'id': attach[0], 'name': attach[1]} for attach in attachment.name_get(cr, uid, attachment_ids, context=context)] + attachment_list = [{'id': attach.id, 'name': attach.name, 'date': attach.create_date} for attach in attachment.browse(cr, uid, attachment_ids, context=context)] return attachment_list - + #------------------------------------------------------ # Email api #------------------------------------------------------ diff --git a/addons/mail/static/src/css/mail.css b/addons/mail/static/src/css/mail.css index c2abc6a5882..f16fd4f0587 100644 --- a/addons/mail/static/src/css/mail.css +++ b/addons/mail/static/src/css/mail.css @@ -391,7 +391,25 @@ } .openerp .oe_mail_msg_content ul.oe_mail_msg_attachments li { float: none; + height: 20px; + line-height: 20px; margin: 0; padding: 0; list-style-type: square; } +.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments .oe_upload_in_process { + float: right; + width: 200px; + height: 16px; +} +.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments .oe_upload_in_process div { + float: left; + width: 38px; + height: 16px; + margin-right: 2px; + background: #66FF66; +} +.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments .oe_upload_in_process span { + color: #aaaaaa; + position: absolute; +} \ No newline at end of file diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index 7fe3cee8a82..e8225bb0c0c 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -114,6 +114,8 @@ openerp.mail = function(session) { this.parent_thread= parent.messages!= undefined ? parent : false; + + this.ds_attachment = new session.web.DataSetSearch(this, 'ir.attachment'); this.fileupload_id = _.uniqueId('oe_fileupload_temp'); $(window).on(self.fileupload_id, self.on_attachment_loaded); }, @@ -148,12 +150,16 @@ openerp.mail = function(session) { var $target = $(event.target); if ($target.val() !== '') { + var filename = $target.val().replace(/.*[\\\/]/,''); + // if the files exits for this answer, delete the file before upload var attachments=[]; for(var i in this.attachment_ids){ - if(this.attachment_ids[i].url == $target.val()){ - var ds_attachment = new session.web.DataSetSearch(this, 'ir.attachment'); - ds_attachment.unlink([this.attachment_ids.id]); + if((this.attachment_ids[i].filename || this.attachment_ids[i].name) == filename){ + if(this.attachment_ids[i].upload){ + return false; + } + this.ds_attachment.unlink([this.attachment_ids[i].id]); } else { attachments.push(this.attachment_ids[i]); } @@ -161,22 +167,87 @@ openerp.mail = function(session) { this.attachment_ids = attachments; // submit file - session.web.blockUI(); - var form = self.$('form.oe_form_binary_form'); - form.submit(); - $target.after($target.clone(true)).remove(); + //session.web.blockUI(); + self.$('form.oe_form_binary_form').submit(); + //self.submit_ajax_attachment(); + + this.$(".oe_attachment_file").hide(); + + this.attachment_ids.push({ + 'id': 0, + 'name': filename, + 'filename': filename, + 'url': '', + 'upload': true + }); + this.display_attachments(); } }, - on_attachment_loaded: function (event, result) { - session.web.unblockUI(); - this.attachment_ids.push({ - 'id': result.id, - 'name': '', - 'filename': result.filename, - 'url': mail.ChatterUtils.get_attachment_url(this.session, result) + + submit_ajax_attachment: function(){ + var self=this; + var $form = self.$('form.oe_form_binary_form'); + var filename = this.$('input.oe_form_binary_file').val().replace(/.*[\\\/]/,''); + + // create form data + var fomdata = new FormData(); + $.each($form.find('input'), function(i, field) { + var $field=$(field); + if($field.attr('type')!='file'){ + fomdata.append($field.attr('name'), $field.val()); + } else { + fomdata.append($field.attr('name'), field.files[0]); + } }); - this.$('input.oe_form_binary_file').empty(); + + var progress=function(event) { + console.log('xhr progress :', Math.floor(event.loaded / event.total*100), event); + self.$("span[name='"+filename+"'] div:lt("+Math.floor(event.loaded / event.total*5)+")").show(); + }; + + $.ajax({ + url: $form.attr("action"), + data: fomdata, + cache: false, + contentType: false, + processData: false, + type: 'POST', + enctype: 'multipart/form-data', + xhr: function() { + // custom xhr + myXhr = $.ajaxSettings.xhr(); + if(myXhr.upload){ + // for handling the progress of the upload + myXhr.upload.addEventListener('progress', progress, false); + } + myXhr.addEventListener('progress', progress, false); + return myXhr; + }, + success: function(data){ + $iframe=$('