[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:
parent
43e9c64882
commit
21aab96e41
|
@ -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):
|
||||
|
|
|
@ -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");
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue