[IMP] deduplicate display of error dialog, add some error handling improvements to restore db

bzr revid: xmo@openerp.com-20110802091344-3lk1wk7ctjhs0j3p
This commit is contained in:
Xavier Morel 2011-08-02 11:13:44 +02:00
parent 43e9c64882
commit 21aab96e41
2 changed files with 66 additions and 61 deletions

View File

@ -212,20 +212,15 @@ class Database(openerpweb.Controller):
@openerpweb.httprequest
def restore_db(self, req, db_file, restore_pwd, new_db):
response = None
try:
data = base64.encodestring(db_file.file.read())
response = simplejson.dumps(
req.session.proxy("db").restore(restore_pwd, new_db, data))
req.session.proxy("db").restore(restore_pwd, new_db, data)
return ''
except xmlrpclib.Fault, e:
if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied':
response = simplejson.dumps({'error': e.faultCode, 'title': 'Restore Database'})
if not response:
response = simplejson.dumps({'error': 'Could not restore database !', 'title': 'Restore Database'})
raise cherrypy.HTTPError(403)
cherrypy.response.headers['Content-Type'] = 'application/json'
cherrypy.response.headers['Content-Length'] = len(response)
return response
raise cherrypy.HTTPError()
@openerpweb.jsonrequest
def change_password_db(self, req, fields):

View File

@ -776,6 +776,25 @@ openerp.base.Database = openerp.base.Controller.extend({
});
});
},
/**
* Displays an error dialog resulting from the various RPC communications
* failing over themselves
*
* @param {Object} error error description
* @param {String} error.title title of the error dialog
* @param {String} error.error message of the error dialog
*/
display_error: function (error) {
return $('<div>').dialog({
modal: true,
title: error.title,
buttons: {
Ok: function() {
$(this).dialog("close");
}
}
}).html(error.error);
},
do_db_create: function() {
var self = this;
self.$option_id.html(QWeb.render("CreateDB", self));
@ -785,27 +804,18 @@ openerp.base.Database = openerp.base.Controller.extend({
var fields = $(form).serializeArray();
$.blockUI();
self.rpc("/base/database/create_db", {'fields': fields}, function(result) {
if (!result.error) {
self.db_list.push(self.to_object(fields)['db_name']);
self.db_list.sort();
var form_obj = self.to_object(fields);
self.wait_for_newdb(
result, {
password: form_obj['super_admin_pwd'],
db: form_obj['db_name']
});
} else {
if (result.error) {
$.unblockUI();
$('<div>').dialog({
modal: true,
title: result.title,
buttons: {
Ok: function() {
$(this).dialog("close");
}
}
}).html(result.error);
self.display_error(result);
return;
}
self.db_list.push(self.to_object(fields)['db_name']);
self.db_list.sort();
var form_obj = self.to_object(fields);
self.wait_for_newdb(result, {
password: form_obj['super_admin_pwd'],
db: form_obj['db_name']
});
});
}
});
@ -826,22 +836,13 @@ openerp.base.Database = openerp.base.Controller.extend({
return;
}
self.rpc("/base/database/drop_db", {'fields': fields}, function(result) {
if (! result.error) {
$db_list.find(':selected').remove();
self.db_list.splice(
_.indexOf(self.db_list, db, true), 1);
self.notification.notify("Dropping database", "The database '" + db + "' has been dropped");
} else {
$('<div>').dialog({
modal: true,
title: result.title,
buttons: {
Ok: function() {
$(this).dialog("close");
}
}
}).html(result.error);
if (result.error) {
self.display_error(result);
return;
}
$db_list.find(':selected').remove();
self.db_list.splice(_.indexOf(self.db_list, db, true), 1);
self.notification.notify("Dropping database", "The database '" + db + "' has been dropped");
});
}
});
@ -906,11 +907,28 @@ openerp.base.Database = openerp.base.Controller.extend({
$(form).ajaxSubmit({
url: '/base/database/restore_db',
type: 'POST',
dataType: 'json',
resetForm: true,
success: function () {
success: function (body) {
// TODO: ui manipulations
// note: response objects don't work
// note: response objects don't work, but we have the
// HTTP body of the response~~
// If empty body, everything went fine
if (!body) { return; }
if (body.indexOf('403 Forbidden') !== -1) {
self.display_error({
title: 'Access Denied',
error: 'Incorrect super-administrator password'
})
} else {
self.display_error({
title: 'Restore Database',
error: 'Could not restore the database'
})
}
},
complete: function () {
$.unblockUI();
}
});
@ -932,22 +950,14 @@ openerp.base.Database = openerp.base.Controller.extend({
}
},
submitHandler: function (form) {
var fields = $(form).serializeArray();
self.rpc("/base/database/change_password_db", {'fields': fields}, function(result) {
if (!result.error) {
self.notification.notify("Changed Password", "Password has been changed successfully");
} else {
$('<div>').dialog({
modal: true,
title: result.title,
buttons: {
Ok: function() {
$(this).dialog("close");
}
}
}).html(result.error);
self.rpc("/base/database/change_password_db", {
'fields': $(form).serializeArray()
}, function(result) {
if (result.error) {
self.display_error(result);
return;
}
self.notification.notify("Changed Password", "Password has been changed successfully");
});
}
});