@@ -141,7 +141,7 @@ wn.pages['data-import-tool'].onload = function(wrapper) { | |||||
}); | }); | ||||
// add overwrite option | // add overwrite option | ||||
var $submit_btn = $('#dit-upload-area form input[type="submit"]'); | |||||
var $submit_btn = $('#dit-upload-area input[type="submit"]'); | |||||
$('<input type="checkbox" name="overwrite" style="margin-top: -3px">\ | $('<input type="checkbox" name="overwrite" style="margin-top: -3px">\ | ||||
<span> Overwrite</span>\ | <span> Overwrite</span>\ | ||||
<p class="help">If you are uploading a child table (for example Item Price), the all the entries of that table will be deleted (for that parent record) and new entries will be made.</p><br>') | <p class="help">If you are uploading a child table (for example Item Price), the all the entries of that table will be deleted (for that parent record) and new entries will be made.</p><br>') | ||||
@@ -114,6 +114,7 @@ wn.ui.form.Attachments = Class.extend({ | |||||
}); | }); | ||||
}, | }, | ||||
new_attachment: function() { | new_attachment: function() { | ||||
var me = this; | |||||
if(!this.dialog) { | if(!this.dialog) { | ||||
this.dialog = new wn.ui.Dialog({ | this.dialog = new wn.ui.Dialog({ | ||||
title: wn._('Upload Attachment'), | title: wn._('Upload Attachment'), | ||||
@@ -132,38 +133,27 @@ wn.ui.form.Attachments = Class.extend({ | |||||
doctype: this.frm.doctype, | doctype: this.frm.doctype, | ||||
docname: this.frm.docname | docname: this.frm.docname | ||||
}, | }, | ||||
callback: wn.ui.form.file_upload_done | |||||
callback: function(fileid, filename) { | |||||
me.add_to_file_list(fileid, filename); | |||||
me.dialog.hide(); | |||||
me.refresh(); | |||||
} | |||||
}); | }); | ||||
}, | }, | ||||
add_to_file_list: function(fileid, filename) { | |||||
var doc = this.frm.doc; | |||||
if(doc.file_list) { | |||||
var fl = doc.file_list.split('\n'); | |||||
fl.push(filename + ',' + fileid); | |||||
doc.file_list = fl.join('\n'); | |||||
} else { | |||||
doc.file_list = filename + ',' + fileid; | |||||
} | |||||
}, | |||||
remove_fileid: function(fileid) { | remove_fileid: function(fileid) { | ||||
this.frm.doc.file_list = $.map(this.get_filelist(), function(f) { | this.frm.doc.file_list = $.map(this.get_filelist(), function(f) { | ||||
if(f.split(',')[1]!=fileid) return f; | if(f.split(',')[1]!=fileid) return f; | ||||
}).join('\n'); | }).join('\n'); | ||||
} | } | ||||
}); | |||||
// this function will be called after the upload is done | |||||
// from webnotes.utils.file_manager | |||||
wn.ui.form.file_upload_done = function(doctype, docname, fileid, filename, at_id, | |||||
new_timestamp) { | |||||
// add to file_list | |||||
var doc = locals[doctype][docname]; | |||||
if(doc.file_list) { | |||||
var fl = doc.file_list.split('\n'); | |||||
fl.push(filename + ',' + fileid); | |||||
doc.file_list = fl.join('\n'); | |||||
} else { | |||||
doc.file_list = filename + ',' + fileid; | |||||
} | |||||
// update timestamp | |||||
doc.modified = new_timestamp; | |||||
// update file_list | |||||
var frm = wn.views.formview[doctype].frm; | |||||
frm.attachments.dialog.hide(); | |||||
msgprint(wn._('File Uploaded Sucessfully.')); | |||||
frm.refresh(); | |||||
}; | |||||
}); |
@@ -5,44 +5,67 @@ | |||||
wn.upload = { | wn.upload = { | ||||
make: function(opts) { | make: function(opts) { | ||||
var id = wn.dom.set_unique_id(); | var id = wn.dom.set_unique_id(); | ||||
$(opts.parent).append(repl('<iframe id="%(id)s" name="%(id)s" src="blank.html" \ | |||||
style="width:0px; height:0px; border:0px"></iframe>\ | |||||
<form method="POST" enctype="multipart/form-data" \ | |||||
action="%(action)s" target="%(id)s">\ | |||||
'+wn._('Upload a file')+':<br>\ | |||||
<input type="file" name="filedata" /><br><br>\ | |||||
OR:<br><input type="text" name="file_url" /><br>\ | |||||
<p class="help">' | |||||
+ (opts.sample_url || 'e.g. http://example.com/somefile.png') | |||||
+ '</p><br>\ | |||||
<input type="submit" class="btn" value="'+wn._('Attach')+'" />\ | |||||
</form>', { | |||||
$(opts.parent).append(); | |||||
var $upload = $("<div class='file-upload'>" + repl(wn._('Upload a file')+':<br>\ | |||||
<input type="file" name="filedata" /><br><br>\ | |||||
OR:<br><input type="text" name="file_url" /><br>\ | |||||
<p class="help">' | |||||
+ (opts.sample_url || 'e.g. http://example.com/somefile.png') | |||||
+ '</p><br>\ | |||||
<input type="submit" class="btn btn-info btn-upload" value="' | |||||
+wn._('Attach')+'" /></div>', { | |||||
id: id, | id: id, | ||||
action: wn.request.url | action: wn.request.url | ||||
})); | |||||
})).appendTo(opts.parent) | |||||
opts.args.cmd = 'uploadfile'; | |||||
opts.args._id = id; | |||||
// get the first file | |||||
$upload.find(".btn-upload").click(function() { | |||||
// convert functions to values | |||||
for(key in opts.args) { | |||||
if(typeof val==="function") | |||||
opt.args[key] = opts.args[key](); | |||||
} | |||||
// add request parameters | |||||
for(key in opts.args) { | |||||
if(opts.args[key]) { | |||||
if(typeof val==="function") { | |||||
var val = opts.args[key](); | |||||
} else { | |||||
var val = opts.args[key]; | |||||
// add other inputs in the div as arguments | |||||
$upload.find("input[name]").each(function() { | |||||
var key = $(this).attr("name"); | |||||
if(key!="filedata" && key!="file_url") { | |||||
opts.args[key] = $(this).val(); | |||||
} | } | ||||
$('<input type="hidden">') | |||||
.attr('name', key) | |||||
.attr('value', val) | |||||
.appendTo($(opts.parent).find('form')); | |||||
} | |||||
}) | |||||
opts.args.file_url = $upload.find('[name="file_url"]').val(); | |||||
var fileobj = $upload.find(":file").get(0).files[0]; | |||||
wn.upload.upload_file(fileobj, opts.args, opts.callback); | |||||
}) | |||||
}, | |||||
upload_file: function(fileobj, args, callback) { | |||||
if(!fileobj && !args.file_url) { | |||||
msgprint(_("Please attach a file or set a URL")); | |||||
return; | |||||
} | } | ||||
var freader = new FileReader(); | |||||
$('#' + id).get(0).callback = opts.callback | |||||
}, | |||||
callback: function(id, file_id, args) { | |||||
$('#' + id).get(0).callback(file_id, args); | |||||
freader.onload = function() { | |||||
args.filedata = freader.result.split(",")[1]; | |||||
args.filename = fileobj.name; | |||||
var msgbox = msgprint(wn._("Uploading...")); | |||||
wn.call({ | |||||
"method": "uploadfile", | |||||
args: args, | |||||
callback: function(r) { | |||||
msgbox.hide(); | |||||
if(r.exc) { | |||||
msgprint("There were errors in uploading."); | |||||
} | |||||
callback(r.message, fileobj.name); | |||||
} | |||||
}); | |||||
} | |||||
freader.readAsDataURL(fileobj); | |||||
} | } | ||||
} | } |
@@ -101,25 +101,18 @@ def uploadfile(): | |||||
import webnotes.utils.file_manager | import webnotes.utils.file_manager | ||||
import json | import json | ||||
ret = [] | |||||
try: | try: | ||||
if webnotes.form_dict.get('from_form'): | if webnotes.form_dict.get('from_form'): | ||||
webnotes.utils.file_manager.upload() | |||||
ret = webnotes.utils.file_manager.upload() | |||||
else: | else: | ||||
if webnotes.form_dict.get('method'): | if webnotes.form_dict.get('method'): | ||||
ret = webnotes.get_method(webnotes.form_dict.method)() | ret = webnotes.get_method(webnotes.form_dict.method)() | ||||
except Exception, e: | except Exception, e: | ||||
webnotes.msgprint(e) | |||||
webnotes.errprint(webnotes.utils.getTraceback()) | webnotes.errprint(webnotes.utils.getTraceback()) | ||||
ret = None | |||||
webnotes.response['type'] = 'iframe' | |||||
if not webnotes.response.get('result'): | |||||
webnotes.response['result'] = """<script> | |||||
window.parent.wn.upload.callback("%s", %s); | |||||
</script>""" % (webnotes.form_dict.get('_id'), | |||||
json.dumps(ret)) | |||||
return ret | |||||
@webnotes.whitelist(allow_guest=True) | @webnotes.whitelist(allow_guest=True) | ||||
def reset_password(user): | def reset_password(user): | ||||
from webnotes.model.code import get_obj | from webnotes.model.code import get_obj | ||||
@@ -34,17 +34,12 @@ def upload(): | |||||
dn = webnotes.form_dict.docname | dn = webnotes.form_dict.docname | ||||
at_id = webnotes.form_dict.at_id | at_id = webnotes.form_dict.at_id | ||||
file_url = webnotes.form_dict.file_url | file_url = webnotes.form_dict.file_url | ||||
filename = webnotes.form['filedata'].filename | |||||
filename = webnotes.form_dict.filename | |||||
webnotes.response['type'] = 'iframe' | |||||
if not filename and not file_url: | if not filename and not file_url: | ||||
webnotes.response['result'] = """ | |||||
<script type='text/javascript'> | |||||
window.parent.wn.views.fomrview['%s'].frm.attachments.dialog.hide(); | |||||
window.parent.msgprint("Please upload a file or copy-paste a link (http://...)"); | |||||
</script>""" % dt | |||||
return | |||||
webnotes.msgprint(_("Please select a file or url"), | |||||
raise_exception=True) | |||||
# save | # save | ||||
if filename: | if filename: | ||||
fid, fname = save_uploaded(dt, dn) | fid, fname = save_uploaded(dt, dn) | ||||
@@ -52,24 +47,9 @@ def upload(): | |||||
fid, fname = save_url(file_url, dt, dn) | fid, fname = save_url(file_url, dt, dn) | ||||
if fid: | if fid: | ||||
# refesh the form! | |||||
# with the new modified timestamp | |||||
webnotes.response['result'] = """ | |||||
<script type='text/javascript'> | |||||
window.parent.wn.ui.form.file_upload_done('%(dt)s', '%(dn)s', '%(fid)s', '%(fname)s', '%(at_id)s', '%(mod)s'); | |||||
window.parent.wn.views.formview['%(dt)s'].frm.show_doc('%(dn)s'); | |||||
</script> | |||||
""" % { | |||||
'dt': dt, | |||||
'dn': dn, | |||||
'fid': fid, | |||||
'fname': fname.replace("'", "\\'"), | |||||
'at_id': at_id, | |||||
'mod': webnotes.conn.get_value(dt, dn, 'modified') | |||||
} | |||||
return fid | |||||
def save_uploaded(dt, dn): | def save_uploaded(dt, dn): | ||||
webnotes.response['type'] = 'iframe' | |||||
fname, content = get_uploaded_content() | fname, content = get_uploaded_content() | ||||
if content: | if content: | ||||
fid = save_file(fname, content, dt, dn) | fid = save_file(fname, content, dt, dn) | ||||
@@ -92,9 +72,10 @@ def save_url(file_url, dt, dn): | |||||
def get_uploaded_content(): | def get_uploaded_content(): | ||||
# should not be unicode when reading a file, hence using webnotes.form | # should not be unicode when reading a file, hence using webnotes.form | ||||
if 'filedata' in webnotes.form: | |||||
i = webnotes.form['filedata'] | |||||
webnotes.uploaded_filename, webnotes.uploaded_content = cstr(i.filename), i.file.read() | |||||
if 'filedata' in webnotes.form_dict: | |||||
import base64 | |||||
webnotes.uploaded_content = base64.b64decode(webnotes.form_dict.filedata) | |||||
webnotes.uploaded_filename = webnotes.form_dict.filename | |||||
return webnotes.uploaded_filename, webnotes.uploaded_content | return webnotes.uploaded_filename, webnotes.uploaded_content | ||||
else: | else: | ||||
webnotes.msgprint('No File') | webnotes.msgprint('No File') | ||||
@@ -127,7 +108,7 @@ def save_file(fname, content, dt, dn): | |||||
f.file_name = fname | f.file_name = fname | ||||
f.attached_to_doctype = dt | f.attached_to_doctype = dt | ||||
f.attached_to_name = dn | f.attached_to_name = dn | ||||
f.fize_size = file_size | |||||
f.file_size = file_size | |||||
f.save(1) | f.save(1) | ||||
return f.name | return f.name | ||||