odoo.define('web.DatabaseManager', function (require) { "use strict"; var core = require('web.core'); var Dialog = require('web.Dialog'); var framework = require('web.framework'); var Widget = require('web.Widget'); var _t = core._t; var QWeb = core.qweb; var DataBaseManager = Widget.extend({ init: function(parent) { this._super(parent); $.validator.addMethod('matches', function (s, _, re) { return new RegExp(re).test(s); }, _t("Invalid database name")); }, start: function() { var self = this; $('.oe_secondary_menus_container,.oe_user_menu_placeholder').empty(); var fetch_db = this.rpc("/web/database/get_list", {}).then( function(result) { self.db_list = result; }, function (_, ev) { ev.preventDefault(); self.db_list = null; }); var fetch_langs = this.rpc("/web/session/get_lang_list", {}).done(function(result) { self.lang_list = result; }); return $.when(fetch_db, fetch_langs).always(self.do_render); }, do_render: function() { var self = this; core.bus.trigger('web_client_toggle_bars', true); self.$el.html(QWeb.render("DatabaseManager", { widget : self })); $('.oe_user_menu_placeholder').append(QWeb.render("DatabaseManager.user_menu",{ widget : self })); $('.oe_secondary_menus_container').append(QWeb.render("DatabaseManager.menu",{ widget : self })); $('ul.oe_secondary_submenu > li:first').addClass('active'); $('ul.oe_secondary_submenu > li').bind('click', function (event) { var menuitem = $(this); menuitem.addClass('active').siblings().removeClass('active'); var form_id =menuitem.find('a').attr('href'); $(form_id).show().siblings().hide(); event.preventDefault(); }); $('#back-to-login').click(self.do_exit); self.$el.find("td").addClass("oe_form_group_cell"); self.$el.find("tr td:first-child").addClass("oe_form_group_cell_label"); self.$el.find("label").addClass("oe_form_label"); self.$el.find("form[name=create_db_form]").validate({ submitHandler: self.do_create }); self.$el.find("form[name=duplicate_db_form]").validate({ submitHandler: self.do_duplicate }); self.$el.find("form[name=drop_db_form]").validate({ submitHandler: self.do_drop }); self.$el.find("form[name=backup_db_form]").validate({ submitHandler: self.do_backup }); self.$el.find("form[name=restore_db_form]").validate({ submitHandler: self.do_restore }); self.$el.find("form[name=change_pwd_form]").validate({ messages: { old_pwd: _t("Please enter your previous password"), new_pwd: _t("Please enter your new password"), confirm_pwd: { required: _t("Please confirm your new password"), equalTo: _t("The confirmation does not match the password") } }, submitHandler: self.do_change_password }); }, destroy: function () { this.$el.find('#db-create, #db-drop, #db-backup, #db-restore, #db-change-password, #back-to-login').unbind('click').end().empty(); this._super(); }, /** * Blocks UI and replaces $.unblockUI by a noop to prevent third parties * from unblocking the UI */ blockUI: function () { framework.blockUI(); $.unblockUI = function () {}; }, /** * Reinstates $.unblockUI so third parties can play with blockUI, and * unblocks the UI */ unblockUI: function () { $.unblockUI = framework.unblockUI; framework.unblockUI(); }, /** * 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 new Dialog(this, { size: 'medium', title: error.title, $content: $('