From 68cb923ec6d75a356575f276180124628e955c9f Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 1 Aug 2011 16:47:28 +0200 Subject: [PATCH] [FIX] backup restoration, works almost 60% of the time bzr revid: xmo@openerp.com-20110801144728-zh1d6nqpf19i6x7p --- addons/base/__openerp__.py | 1 + addons/base/controllers/main.py | 25 ++++++++++++++----------- addons/base/static/src/js/chrome.js | 23 ++++++++--------------- addons/base/static/src/xml/base.xml | 2 +- 4 files changed, 24 insertions(+), 27 deletions(-) diff --git a/addons/base/__openerp__.py b/addons/base/__openerp__.py index e17e2d82c6d..3195ac4d7e0 100644 --- a/addons/base/__openerp__.py +++ b/addons/base/__openerp__.py @@ -6,6 +6,7 @@ 'js' : [ "static/lib/datejs/date-en-US.js", "static/lib/jquery/jquery-1.5.2.js", + "static/lib/jquery.form/jquery.form.js", "static/lib/jquery.validate/jquery.validate.js", "static/lib/jquery.ba-bbq/jquery.ba-bbq.js", "static/lib/jquery.contextmenu/jquery.contextmenu.r2.packed.js", diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 6df4287e071..e1f30fd5b70 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -206,20 +206,23 @@ class Database(openerpweb.Controller): return {'error': e.faultCode, 'title': 'Backup Database'} return {'error': 'Could not drop database !', 'title': 'Backup Database'} - @openerpweb.jsonrequest - def restore_db(self, req, fields): - password, db, filename = operator.itemgetter( - 'restore_pwd', 'new_db', 'value')( - dict(map(operator.itemgetter('name', 'value'), fields))) - + @openerpweb.httprequest + def restore_db(self, req, db_file, restore_pwd, new_db): + response = None try: - data = base64.encodestring(filename.file.read()) - return req.session.proxy("db").restore(password, db, data) + data = base64.encodestring(db_file.file.read()) + response = simplejson.dumps( + req.session.proxy("db").restore(restore_pwd, new_db, data)) except xmlrpclib.Fault, e: if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': - return {'error': e.faultCode, 'title': 'Restore Database'} - return {'error': 'Could not restore database !', 'title': 'Restore Database'} - + response = simplejson.dumps({'error': e.faultCode, 'title': 'Restore Database'}) + if not response: + response = simplejson.dumps({'error': 'Could not restore database !', 'title': 'Restore Database'}) + + cherrypy.response.headers['Content-Type'] = 'application/json' + cherrypy.response.headers['Content-Length'] = len(response) + return response + @openerpweb.jsonrequest def change_password_db(self, req, fields): old_password, new_password = operator.itemgetter( diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index cf3e9b1ef2b..7e415ea83f5 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -842,21 +842,14 @@ openerp.base.Database = openerp.base.Controller.extend({ self.$option_id.find("form[name=restore_db_form]").validate({ submitHandler: function (form) { - var fields = $(form).serializeArray(); - - self.rpc("/base/database/restore_db", {'fields': fields}, function(result) { - if (!result.error) { - self.notification.notify("Restore Database", "You restored your database"); - } else { - $('
').dialog({ - modal: true, - title: result.title, - buttons: { - Ok: function() { - $(this).dialog("close"); - } - } - }).html(result.error); + $(form).ajaxSubmit({ + url: '/base/database/restore_db', + type: 'POST', + dataType: 'json', + resetForm: true, + success: function () { + // TODO: ui manipulations + // note: response objects don't work } }); } diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index 4187f1faf9c..efd8b939661 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -192,7 +192,7 @@ -