summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorAntony Lesuisse <al@openerp.com>2015-07-31 00:33:47 +0200
committerAntony Lesuisse <al@openerp.com>2015-08-01 18:04:14 +0200
commit3cba55d7a7e1f01150f87f806546e10526b10219 (patch)
tree442923b0c39d5bed1ef4c111fbf69715954c7cb4 /addons
parent4b330f3173eb0a3d82b743c73de6cf5c9ecd0178 (diff)
[IMP] web: web 1.0 database manager
Implement the database manager with plain HTML forms and HTTP controllers.
Diffstat (limited to 'addons')
-rw-r--r--addons/web/controllers/main.py150
-rw-r--r--addons/web/static/src/img/logo_inverse_white_206px.pngbin0 -> 8208 bytes
-rw-r--r--addons/web/static/src/js/widgets/database_manager.js215
-rw-r--r--addons/web/static/src/xml/base.xml277
-rw-r--r--addons/web/views/database_manager.html427
-rw-r--r--addons/web/views/database_selector.html65
-rw-r--r--addons/web/views/webclient_templates.xml1
-rw-r--r--addons/web_tests_demo/static/test/demo.js21
8 files changed, 359 insertions, 797 deletions
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index 894faec7e51..911f42575d0 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -37,7 +37,6 @@ from openerp.tools import topological_sort
from openerp.tools.translate import _
from openerp.tools import ustr
from openerp import http
-
from openerp.http import request, serialize_exception as _serialize_exception
from openerp.exceptions import AccessError
@@ -679,118 +678,93 @@ class Proxy(http.Controller):
class Database(http.Controller):
- @http.route('/web/database/selector', type='http', auth="none")
- def selector(self, **kw):
+ def _render_template(self, **d):
+ d.setdefault('manage',True)
+ d['insecure'] = openerp.tools.config['admin_passwd'] == 'admin'
+ d['list_db'] = openerp.tools.config['list_db']
+ d['langs'] = openerp.service.db.exp_list_lang()
+ # databases list
+ d['databases'] = []
try:
- dbs = http.db_list()
- if not dbs:
- return http.local_redirect('/web/database/manager')
+ d['databases'] = http.db_list()
except openerp.exceptions.AccessDenied:
- dbs = False
- return env.get_template("database_selector.html").render({
- 'databases': dbs,
- 'debug': request.debug,
- 'error': kw.get('error')
- })
+ monodb = db_monodb()
+ if monodb:
+ d['databases'] = [monodb]
+ return env.get_template("database_manager.html").render(d)
+
+ @http.route('/web/database/selector', type='http', auth="none")
+ def selector(self, **kw):
+ return self._render_template(manage=False)
@http.route('/web/database/manager', type='http', auth="none")
def manager(self, **kw):
- # TODO: migrate the webclient's database manager to server side views
- request.session.logout()
- return env.get_template("database_manager.html").render({
- 'modules': simplejson.dumps(module_boot()),
- })
+ return self._render_template()
- @http.route('/web/database/get_list', type='json', auth="none")
- def get_list(self):
- # TODO change js to avoid calling this method if in monodb mode
+ @http.route('/web/database/create', type='http', auth="none")
+ def create(self, master_pwd, name, lang, password, **post):
try:
- return http.db_list()
- except openerp.exceptions.AccessDenied:
- monodb = db_monodb()
- if monodb:
- return [monodb]
- raise
-
- @http.route('/web/database/create', type='json', auth="none")
- def create(self, fields):
- params = dict(map(operator.itemgetter('name', 'value'), fields))
- db_created = request.session.proxy("db").create_database(
- params['super_admin_pwd'],
- params['db_name'],
- bool(params.get('demo_data')),
- params['db_lang'],
- params['create_admin_pwd'])
- if db_created:
- request.session.authenticate(params['db_name'], 'admin', params['create_admin_pwd'])
- return db_created
-
- @http.route('/web/database/duplicate', type='json', auth="none")
- def duplicate(self, fields):
- params = dict(map(operator.itemgetter('name', 'value'), fields))
- duplicate_attrs = (
- params['super_admin_pwd'],
- params['db_original_name'],
- params['db_name'],
- )
-
- return request.session.proxy("db").duplicate_database(*duplicate_attrs)
-
- @http.route('/web/database/drop', type='json', auth="none")
- def drop(self, fields):
- password, db = operator.itemgetter(
- 'drop_pwd', 'drop_db')(
- dict(map(operator.itemgetter('name', 'value'), fields)))
+ request.session.proxy("db").create_database(master_pwd, name, bool(post.get('demo')), lang, password)
+ request.session.authenticate(name, login, password)
+ return http.local_redirect('/web/')
+ except Exception, e:
+ error = "Database creation error: %s" % e
+ return self._render_template(error=error)
+ @http.route('/web/database/duplicate', type='http', auth="none")
+ def duplicate(self, master_pwd, name, new_name):
try:
- if request.session.proxy("db").drop(password, db):
- return True
- else:
- return False
- except openerp.exceptions.AccessDenied:
- return {'error': 'AccessDenied', 'title': 'Drop Database'}
- except Exception:
- return {'error': _('Could not drop database !'), 'title': _('Drop Database')}
+ request.session.proxy("db").duplicate_database(master_pwd, name, new_name)
+ return http.local_redirect('/web/database/manager')
+ except Exception, e:
+ error = "Database duplication error: %s" % e
+ return self._render_template(error=error)
+
+ @http.route('/web/database/drop', type='http', auth="none")
+ def drop(self, master_pwd, name):
+ try:
+ request.session.proxy("db").drop(master_pwd, name)
+ return http.local_redirect('/web/database/manager')
+ except Exception, e:
+ error = "Database deletion error: %s" % e
+ return self._render_template(error=error)
@http.route('/web/database/backup', type='http', auth="none")
- def backup(self, backup_db, backup_pwd, token, backup_format='zip'):
+ def backup(self, master_pwd, name, backup_format = 'zip'):
try:
- openerp.service.security.check_super(backup_pwd)
+ openerp.service.db.check_super(master_pwd)
ts = datetime.datetime.utcnow().strftime("%Y-%m-%d_%H-%M-%S")
- filename = "%s_%s.%s" % (backup_db, ts, backup_format)
+ filename = "%s_%s.%s" % (name, ts, backup_format)
headers = [
('Content-Type', 'application/octet-stream; charset=binary'),
('Content-Disposition', content_disposition(filename)),
]
- dump_stream = openerp.service.db.dump_db(backup_db, None, backup_format)
+ dump_stream = openerp.service.db.dump_db(name, None, backup_format)
response = werkzeug.wrappers.Response(dump_stream, headers=headers, direct_passthrough=True)
- response.set_cookie('fileToken', token)
return response
except Exception, e:
_logger.exception('Database.backup')
- return simplejson.dumps([[],[{'error': openerp.tools.ustr(e), 'title': _('Backup Database')}]])
+ error = "Database backup error: %s" % e
+ return self._render_template(error=error)
@http.route('/web/database/restore', type='http', auth="none")
- def restore(self, db_file, restore_pwd, new_db, mode):
+ def restore(self, master_pwd, backup_file, name, copy=False):
try:
- copy = mode == 'copy'
- data = base64.b64encode(db_file.read())
- request.session.proxy("db").restore(restore_pwd, new_db, data, copy)
- return ''
- except openerp.exceptions.AccessDenied, e:
- raise Exception("AccessDenied")
-
- @http.route('/web/database/change_password', type='json', auth="none")
- def change_password(self, fields):
- old_password, new_password = operator.itemgetter(
- 'old_pwd', 'new_pwd')(
- dict(map(operator.itemgetter('name', 'value'), fields)))
+ data = base64.b64encode(backup_file.read())
+ request.session.proxy("db").restore(master_pwd, name, data, copy)
+ return http.local_redirect('/web/database/manager')
+ except Exception, e:
+ error = "Database restore error: %s" % e
+ return self._render_template(error=error)
+
+ @http.route('/web/database/change_password', type='http', auth="none")
+ def change_password(self, master_pwd, master_pwd_new):
try:
- return request.session.proxy("db").change_admin_password(old_password, new_password)
- except openerp.exceptions.AccessDenied:
- return {'error': 'AccessDenied', 'title': _('Change Password')}
- except Exception:
- return {'error': _('Error, password not changed !'), 'title': _('Change Password')}
+ request.session.proxy("db").change_admin_password(master_pwd, master_pwd_new)
+ return http.local_redirect('/web/database/manager')
+ except Exception, e:
+ error = "Master password update error: %s" % e
+ return self._render_template(error=error)
class Session(http.Controller):
diff --git a/addons/web/static/src/img/logo_inverse_white_206px.png b/addons/web/static/src/img/logo_inverse_white_206px.png
new file mode 100644
index 00000000000..528d485f2fa
--- /dev/null
+++ b/addons/web/static/src/img/logo_inverse_white_206px.png
Binary files differ
diff --git a/addons/web/static/src/js/widgets/database_manager.js b/addons/web/static/src/js/widgets/database_manager.js
deleted file mode 100644
index cbffa5117dc..00000000000
--- a/addons/web/static/src/js/widgets/database_manager.js
+++ /dev/null
@@ -1,215 +0,0 @@
-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: $('<div>').html(error.error)
- }).open();
- },
- do_create: function(form) {
- var fields = $(form).serializeArray();
- this.rpc("/web/database/create", {'fields': fields}).done(function(result) {
- if (result) {
- framework.redirect('/web');
- } else {
- alert("Failed to create database");
- }
- });
- },
- do_duplicate: function(form) {
- var self = this;
- var fields = $(form).serializeArray();
- self.rpc("/web/database/duplicate", {'fields': fields}).then(function(result) {
- if (result.error) {
- self.display_error(result);
- return;
- }
- self.do_notify(_t("Duplicating database"), _t("The database has been duplicated."));
- self.start();
- });
- },
- do_drop: function(form) {
- var self = this;
- var $form = $(form),
- fields = $form.serializeArray(),
- $db_list = $form.find('[name=drop_db]'),
- db = $db_list.val();
- if (!db || !confirm(_.str.sprintf(_t("Do you really want to delete the database: %s ?"), db))) {
- return;
- }
- self.rpc("/web/database/drop", {'fields': fields}).done(function(result) {
- if (result.error) {
- self.display_error(result);
- return;
- }
- self.do_notify(_t("Dropping database"), _.str.sprintf(_t("The database %s has been dropped"), db));
- self.start();
- });
- },
- do_backup: function(form) {
- var self = this;
- self.blockUI();
- self.session.get_file({
- form: form,
- success: function () {
- self.do_notify(_t("Backed"), _t("Database backed up successfully"));
- },
- error: function(error){
- if (error && error[1]) {
- self.display_error(error[1][0]);
- }
- },
- complete: function() {
- self.unblockUI();
- }
- });
- },
- do_restore: function(form) {
- var self = this;
- self.blockUI();
- $(form).ajaxSubmit({
- url: '/web/database/restore',
- type: 'POST',
- resetForm: true,
- success: function (body) {
- // If empty body, everything went fine
- if (!body) { return; }
-
- if (body.indexOf('403 Forbidden') !== -1) {
- self.display_error({
- title: _t("Access Denied"),
- error: _t("Incorrect super-administrator password")
- });
- } else {
- self.display_error({
- title: _t("Restore Database"),
- error: _t("Could not restore the database")
- });
- }
- },
- complete: function() {
- self.unblockUI();
- self.do_notify(_t("Restored"), _t("Database restored successfully"));
- }
- });
- },
- do_change_password: function(form) {
- var self = this;
- self.rpc("/web/database/change_password", {
- 'fields': $(form).serializeArray()
- }).done(function(result) {
- if (result.error) {
- self.display_error(result);
- return;
- }
- self.unblockUI();
- self.do_notify(_t("Changed Password"), _t("Password has been changed successfully"));
- });
- },
- do_exit: function () {
- this.$el.remove();
- framework.redirect('/web');
- }
-});
-
-core.action_registry.add("database_manager", DataBaseManager);
-
-return DataBaseManager;
-
-});
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 4bd7970c152..42d2f0ae34e 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -54,283 +54,6 @@
</div>
</t>
-<t t-name="DatabaseManager">
- <div class="oe_view_manager_view_form">
- <div class="oe_form">
- <form id="db_create" name="create_db_form" style="display: block;">
- <div class="oe_view_manager oe_view_manager_current">
- <div class="oe-control-panel" style="padding: 8px;">
- <div class="oe_header_row">
- <h2 class="oe_view_title">
- <span class="oe_view_title_text oe_breadcrumb_title">Create a New Database</span>
- </h2>
- </div>
- </div>
- </div>
- <p class="oe_grey" style="margin: 10px">
- Fill in this form to create an Odoo database. You can
- create databases for different companies or for different
- goals (testing, production). Once the database is created,
- you will be able to install your first application.
- </p>
- <p class="oe_grey" style="margin: 10px">
- By default, the master password is 'admin'. This password
- is required to create, delete, dump or restore databases.
- </p>
- <table class="db_option_table" style="margin: 10px">
- <tr>
- <td><label for="super_admin_pwd">Master password:</label></td>
- <td>
- <input type="password" name="super_admin_pwd" class="required" value="admin"/>
- </td>
- </tr>
- <tr>
- <td><label for="db_name">Select a database name:</label></td>
- <td>
- <input type="text" name="db_name" class="required" matches="^[a-zA-Z0-9][a-zA-Z0-9_-]+$" autofocus="true" placeholder="e.g. mycompany"/>
- </td>
- </tr>
- <tr>
- <td><label for="demo_data">Load demonstration data:</label></td>
- <td class="oe_form_group_cell">
- <span class="oe_form_field oe_form_field_boolean oe_grey" >
- <input type="checkbox" name="demo_data" />
- Check this box to evaluate Odoo.
- </span>
- </td>
- </tr>
- <tr>
- <td><label for="db_lang">Default language:</label></td>
- <td class="oe_form_field oe_form_field_selection">
- <select name="db_lang" t-if="widget.lang_list" class="oe_inline">
- <t t-foreach="widget.lang_list" t-as="lang">
- <option t-att-value="lang[0]" t-att-selected="lang[0] === 'en_US' ? 'selected' : undefined">
- <t t-esc="lang[1]" />
- </option>
- </t>
- </select>
- </td>
- </tr>
- <tr>
- <td><label for="create_admin_pwd">Choose a password:</label></td>
- <td><input type="password" name="create_admin_pwd" class="required" /></td>
- </tr>
- <tr>
- <td><label for="create_confirm_pwd">Confirm password:</label></td>
- <td><input type="password" name="create_confirm_pwd" class="required" equalTo="input[name=create_admin_pwd]"/></td>
- </tr>
- <tr>
- <td></td>
- <td><button type="submit" class="oe_button oe_highlight db_create">Create Database</button></td>
- </tr>
- </table>
- </form>
- <form id="db_duplicate" name="duplicate_db_form" style="display: none;">
- <div class="oe_view_manager oe_view_manager_current">
- <div class="oe-control-panel" style="padding: 8px;">
- <div class="oe_header_row">
- <h2 class="oe_view_title">
- <span class="oe_view_title_text oe_breadcrumb_title">Duplicate Database</span>
- </h2>
- <button type="submit" class="oe_button oe_highlight db_duplicate">Duplicate</button>
- </div>
- </div>
- </div>
- <table align="center" class="db_option_table">
- <tr>
- <td><label for="super_admin_pwd">Master password:</label></td>
- <td><input type="password" name="super_admin_pwd" class="required" value="admin" /></td>
- </tr>
- <tr>
- <td><label for="db_original_name">Original database name:</label></td>
- <td><input type="text" name="db_original_name" class="required" matches="^[a-zA-Z][a-zA-Z0-9_-]+$" autofocus="true"/></td>
- </tr>
- <tr>
- <td><label for="db_name">New database name:</label></td>
- <td><input type="text" name="db_name" class="required" matches="^[a-zA-Z][a-zA-Z0-9_-]+$" /></td>
- </tr>
- </table>
- </form>
- <form id="db_drop" name="drop_db_form" style="display: none; ">
- <div class="oe_view_manager oe_view_manager_current">
- <div class="oe-control-panel" style="padding: 8px;">
- <div class="oe_header_row">
- <h2 class="oe_view_title">
- <span class="oe_view_title_text oe_breadcrumb_title">Drop Database</span>
- </h2>
- <button type="submit" class="oe_button oe_highlight db_drop">Drop</button>
- </div>
- </div>
- </div>
- <table align="center" class="db_option_table">
- <tr>
- <td><label for="drop_db">Database:</label></td>
- <td class="oe_form_field oe_form_field_selection">
- <select t-if="widget.db_list" name="drop_db" autofocus="autofocus">
- <t t-foreach="widget.db_list" t-as="db">
- <option t-att-value="db">
- <t t-esc="db" />
- </option>
- </t>
- </select>
- <input t-if="!widget.db_list" name="drop_db" class="required" type="text" autofocus="autofocus"/>
- </td>
- </tr>
- <tr>
- <td><label for="drop_password">Master Password:</label></td>
- <td><input type="password" name="drop_pwd" class="required" /></td>
- </tr>
- </table>
- </form>
- <form id="db_backup" name="backup_db_form" target="backup-target" action="/web/database/backup" style="display: none;">
- <div class="oe_view_manager oe_view_manager_current">
- <div class="oe-control-panel" style="padding: 8px;">
- <div class="oe_header_row">
- <h2 class="oe_view_title">
- <span class="oe_view_title_text oe_breadcrumb_title">Backup Database</span>
- </h2>
- <button type="submit" class="oe_button oe_highlight db_backup">Backup</button>
- </div>
- </div>
- </div>
- <input type="hidden" name="token" />
- <table align="center" class="db_option_table">
- <tr>
- <td><label for="backup_db">Database:</label></td>
- <td class="oe_form_field oe_form_field_selection ">
- <select t-if="widget.db_list" name="backup_db" autofocus="autofocus">
- <t t-foreach="widget.db_list" t-as="db">
- <option t-att-value="db">
- <t t-esc="db" />
- </option>
- </t>
- </select>
- <input t-if="!widget.db_list" name="backup_db" class="required" type="text" autofocus="autofocus"/>
- </td>
- </tr>
- <tr>
- <td><label for="backup_format">Backup format:</label></td>
- <td class="oe_form_field oe_form_field_selection">
- <select name="backup_format">
- <option value="zip">zip (includes filestore)</option>
- <option value="dump">pg_dump custom format (without filestore)</option>
- </select>
- </td>
- </tr>
- <tr>
- <td><input type="password" name="backup_pwd" class="required" /></td>
- </tr>
- </table>
- </form>
- <form id="db_restore" name="restore_db_form" style="display: none; ">
- <div class="oe_view_manager oe_view_manager_current">
- <div class="oe-control-panel" style="padding: 8px;">
- <div class="oe_header_row">
- <h2 class="oe_view_title">
- <span class="oe_view_title_text oe_breadcrumb_title">Restore Database</span>
- </h2>
- <button type="submit" class="oe_button oe_highlight db_restore">Restore</button>
- </div>
- </div>
- </div>
- <table align="center" class="db_option_table">
- <tr>
- <td><label for="restore_pwd">Master Password:</label></td>
- <td><input type="password" name="restore_pwd" class="required" autofocus="autofocus"/></td>
- </tr>
- <tr>
- <td><label for="restore_db">File:</label></td>
- <td><input type="file" name="db_file" class="required"/></td>
- </tr>
- <tr>
- <td><label for="new_db">New database name:</label></td>
- <td><input type="text" name="new_db" class="required"/></td>
- </tr>
- <tr>
- <td><label for="mode">Mode:</label></td>
- <td><select name="mode" class="required">
- <option value="restore">Backup Restore</option>
- <option value="copy">Copy of an existing database</option>
- </select></td>
- </tr>
- </table>
- </form>
- <form id="db_change_password" name="change_pwd_form" style="display: none;">
- <div class="oe_view_manager oe_view_manager_current">
- <div class="oe-control-panel" style="padding: 8px;">
- <div class="oe_header_row">
- <h2 class="oe_view_title">
- <span class="oe_view_title_text oe_breadcrumb_title">Change Master Password</span>
- </h2>
- <button type="submit" class="oe_button oe_highlight db-change-password">Change Password</button>
- </div>
- </div>
- </div>
- <table align="center" class="db_option_table">
- <tr>
- <td><label for="old_pwd">Master password:</label></td>
- <td><input type="password" name="old_pwd" class="required" minlength="1" autofocus="autofocus"/></td>
- </tr>
- <tr>
- <td><label for="new_pwd">New master password:</label></td>
- <td><input type="password" name="new_pwd" class="required" minlength="1"/></td>
- </tr>
- <tr>
- <td><label for="confirm_pwd">Confirm new master password:</label></td>
- <td><input type="password" name="confirm_pwd" class="required" equalTo="input[name=new_pwd]" minlength="1"/> </td>
- </tr>
- </table>
- </form>
- </div>
- </div>
-</t>
-<t t-name="DatabaseManager.user_menu">
- <li>
- <a id="back-to-login" href="#">Back to Login</a>
- </li>
-</t>
-<t t-name="DatabaseManager.menu">
- <div class="oe_secondary_menu_section">Database Management</div>
- <ul class="oe_secondary_submenu nav nav-pills nav-stacked">
- <li><a href="#db_create">Create</a></li>
- <li><a href="#db_duplicate">Duplicate</a></li>
- <li><a href="#db_drop">Drop</a></li>
- <li><a href="#db_backup">Backup</a></li>
- <li><a href="#db_restore">Restore</a></li>
- <li><a href="#db_change_password">Password</a></li>
- </ul>
-</t>
-
-<t t-name="ChangePassword">
- <form name="change_password_form" method="POST">
- <div class="oe_form">
- <table align="center">
- <tr>
- <td class="oe_form_group_cell oe_form_group_cell_label"><label for="old_pwd" class="oe_form_label">Old Password:</label></td>
- <td class="oe_form_group_cell"><input type="password" name="old_pwd"
- minlength="1" autofocus="autofocus"/></td>
- </tr>
- <tr>
- <td class="oe_form_group_cell oe_form_group_cell_label"><label for="new_password" class="oe_form_label">New Password:</label></td>
- <td class="oe_form_group_cell"><input type="password" name="new_password"
- minlength="1"/></td>
- </tr>
- <tr>
- <td class="oe_form_group_cell oe_form_group_cell_label"><label for="confirm_pwd" class="oe_form_label">Confirm New Password:</label></td>
- <td class="oe_form_group_cell"><input type="password" name="confirm_pwd"
- minlength="1"/></td>
- </tr>
- <tr>
- <td colspan="2" align="right">
- <button class='oe_button oe_form_button'>Change Password</button>
- <button type="button" class="oe_button oe_form_button_cancel oe_form_button oe_link" href="javascript:void(0)"><span>Cancel</span></button>
- </td>
- </tr>
- </table>
- </div>
- </form>
-</t>
-
<t t-name="Menu.needaction_counter">
<div id="menu_counter" class="badge pull-right">
<t t-if="widget.needaction_counter &gt; 99"> 99+ </t>
diff --git a/addons/web/views/database_manager.html b/addons/web/views/database_manager.html
index 3e434c369de..6602ed5635c 100644
--- a/addons/web/views/database_manager.html
+++ b/addons/web/views/database_manager.html
@@ -1,144 +1,311 @@
<!DOCTYPE html>
-<html style="height: 100%;">
- <head>
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <title>Odoo</title>
- <link rel="shortcut icon" href="/web/static/src/img/favicon.ico" type="image/x-icon"/>
- <link rel="stylesheet" href="/web/static/src/css/full.css" />
- <script src="/web/static/lib/es5-shim/es5-shim.min.js" type="text/javascript"></script>
- <script src="/web/static/lib/underscore/underscore.js" type="text/javascript"></script>
- <script src="/web/static/lib/underscore.string/lib/underscore.string.js" type="text/javascript"></script>
- <script src="/web/static/lib/spinjs/spin.js" type="text/javascript"></script>
- <script src="/web/static/lib/jquery/jquery.js" type="text/javascript"></script>
- <script src="/web/static/lib/jquery/jquery.browser.js" type="text/javascript"></script>
- <script src="/web/static/lib/jquery.blockUI/jquery.blockUI.js" type="text/javascript"></script>
- <script src="/web/static/lib/jquery.hotkeys/jquery.hotkeys.js" type="text/javascript"></script>
- <script src="/web/static/lib/jquery.placeholder/jquery.placeholder.js" type="text/javascript"></script>
- <script src="/web/static/lib/jquery.timeago/jquery.timeago.js" type="text/javascript"></script>
- <script src="/web/static/lib/jquery.form/jquery.form.js" type="text/javascript"></script>
+<html>
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>Odoo</title>
+ <link rel="shortcut icon" href="/web/static/src/img/favicon.ico" type="image/x-icon">
+ <link rel="stylesheet" href="/web/static/lib/fontawesome/css/font-awesome.css">
+ <link rel="stylesheet" href="/web/static/lib/bootstrap/css/bootstrap.css">
+ <script src="/web/static/lib/jquery/jquery.js" type="text/javascript"></script>
+ <script src="/web/static/lib/bootstrap/js/modal.js"></script>
+ <script src="/web/static/lib/bootstrap/js/tooltip.js"></script>
+ <script src="/web/static/lib/bootstrap/js/dropdown.js"></script>
+ <script type="text/javascript">
+ $(function() {
+ // Little eye
+ $('body').on('mousedown','.o_little_eye',function(ev) {
+ $(ev.target).siblings('input').prop('type','text');
+ });
+ $('body').on('mouseup','.o_little_eye',function(ev) {
+ $(ev.target).siblings('input').prop('type','password');
+ });
+ // db modal
+ $('body').on('click','.o_database_action', function(ev) {
+ ev.preventDefault();
+ var db = $(ev.currentTarget).data('db');
+ var target = $(ev.currentTarget).data('target');
+ $(target).find('input[name=name]').val(db);
+ $(target).modal();
+ });
+ });
+ </script>
+</head>
- <script src="/web/static/lib/jquery.ba-bbq/jquery.ba-bbq.js" type="text/javascript"></script>
+{% macro master_input() -%}
+ <div class="form-group">
+ {% if insecure %}
+ <input type="hidden" name="master_pwd" class="form-control" value="admin"/>
+ {% else %}
+ <label for="master_pwd" class="control-label">Master Password</label>
+ <input type="password" name="master_pwd" class="form-control" required="required" autofocus="autofocus"/>
+ {% endif %}
+ </div>
+{%- endmacro %}
- <script src="/web/static/lib/jquery.validate/jquery.validate.js" type="text/javascript"></script>
- <script src="/web/static/lib/autosize/autosize.js" type="text/javascript"></script>
- <script src="/web/static/lib/jquery.scrollTo/jquery.scrollTo.js" type="text/javascript"></script>
- <script src="/web/static/lib/jquery.textext/jquery.textext.js" type="text/javascript"></script>
- <script src="/web/static/lib/select2/select2.js" type="text/javascript"></script>
- <script src="/web/static/lib/jquery.ui/jquery-ui.js" type="text/javascript"></script>
- <script src="/web/static/lib/jquery.ui.notify/js/jquery.notify.js" type="text/javascript"></script>
+{% macro create_form() -%}
+ <p>Fill in this form to create an Odoo database. You may create
+ databases for different companies or for different goals (testing,
+ production). Once the database is created, you will be able to
+ install your first application.</p>
+ {{ master_input() }}
+ <div class="form-group">
+ <div class="row">
+ <div class="col-md-8">
+ <label for="name" class="control-label">Database Name</label>
+ <input type="text" name="name" class="form-control" required="required" autocomplete="off"/>
+ </div>
+ <div class="col-md-4">
+ <label for="name" class="control-label">Language</label>
+ <select name="lang" class="form-control" required="required" autocomplete="off">
+ {% for lang in langs %}
+ <option {% if lang[0] == "en_US" %}selected="selected" {% endif %}value="{{ lang[0] }}">{{ lang[1] }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ </div>
+ </div>
+ <div class="form-group has-feedback">
+ <label for="password" class="control-label">Password of <em>admin</em> user</label>
+ <input type="password" name="password" class="form-control" required="required" autocomplete="off"/>
+ <span class="fa fa-eye o_little_eye form-control-feedback" aria-hidden="true" style="cursor: pointer; pointer-events: auto"></span>
+ </div>
+ <div class="form-group">
+ <div class="checkbox">
+ <label>
+ <input name="demo" type="checkbox" class="pull-right" value="1">
+ <span>Load demonstration data</span>
+ <span class="text-muted"> (Check this box to evaluate Odoo)</span>
+ </label>
+ </div>
+ </div>
+{%- endmacro %}
- <link rel="stylesheet" href='/website/static/src/less/import_bootstrap.less'/>
- <link rel="stylesheet" href="/web/static/src/less/enterprise_compatibility.less"/>
- <link rel="stylesheet" href="/web/static/src/less/utils.less"/>
- <script src="/web/static/lib/bootstrap/js/modal.js"></script>
- <script src="/web/static/lib/bootstrap/js/tooltip.js"></script>
- <script src="/web/static/lib/backbone/backbone.js" type="text/javascript"></script>
- <script src="/web/static/lib/qweb/qweb2.js" type="text/javascript"></script>
- <script src="/web/static/lib/py.js/lib/py.js" type="text/javascript"></script>
+<body class="container">
- <script type="text/javascript" src="/web/static/src/js/boot.js"></script>
- <script type="text/javascript">
- odoo._modules = ['web', 'web_kanban'];
- </script>
- <script type="text/javascript" src="/web/static/src/js/framework/class.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/translation.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/ajax.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/time.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/mixins.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/widget.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/registry.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/session.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/model.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/utils.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/core.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/formats.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/view.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/pyeval.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/data.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/data_model.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/misc.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/session_instance.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/crash_manager.js"></script>
- <script type="text/javascript" src="/web/static/src/js/action_manager.js"></script>
- <script type="text/javascript" src="/web/static/src/js/control_panel.js"></script>
- <script type="text/javascript" src="/web/static/src/js/view_manager.js"></script>
- <script type="text/javascript" src="/web/static/src/js/web_client.js"></script>
- <script type="text/javascript" src="/web/static/src/js/widgets/data_export.js"></script>
- <script type="text/javascript" src="/web/static/src/js/widgets/date_picker.js"></script>
- <script type="text/javascript" src="/web/static/src/js/widgets/database_manager.js"></script>
- <script type="text/javascript" src="/web/static/src/js/widgets/loading.js"></script>
- <script type="text/javascript" src="/web/static/src/js/widgets/notification.js"></script>
- <script type="text/javascript" src="/web/static/src/js/widgets/sidebar.js"></script>
- <script type="text/javascript" src="/web/static/src/js/widgets/systray_menu.js"></script>
- <script type="text/javascript" src="/web/static/src/js/widgets/user_menu.js"></script>
- <script type="text/javascript" src="/web/static/src/js/framework/dialog.js"></script>
- <script type="text/javascript" src="/web/static/src/js/menu.js"></script>
- <script type="text/javascript" src="/web/static/src/js/views/list_common.js"></script>
- <script type="text/javascript" src="/web/static/src/js/views/list_view.js"></script>
- <script type="text/javascript" src="/web/static/src/js/views/form_view.js"></script>
- <script type="text/javascript" src="/web/static/src/js/views/form_common.js"></script>
- <script type="text/javascript" src="/web/static/src/js/views/search_view.js"></script>
- <script type="text/javascript" src="/web/static/src/js/views/search_filters.js"></script>
- <script type="text/javascript" src="/web/static/src/js/views/search_inputs.js"></script>
- <script type="text/javascript" src="/web/static/src/js/views/search_menus.js"></script>
+ <!-- Database List -->
+ <div class="row">
+ <div class="col-md-6 col-md-offset-3 o_database_list">
+ <div class="text-center">
+ <img src="/web/static/src/img/logo2.png" class="img-responsive center-block"/>
+ </div>
+ {% if insecure and databases %}
+ <div class="alert alert-warning">
+ Warning, your Odoo database manager is not protected.
+ Please <a href="#" data-toggle="modal" data-target=".o_database_master">set a master password</a>
+ to secure it.
+ </div>
+ {% endif %}
+ {% if error %}
+ <div class="alert alert-danger">{{ error }}</div>
+ {% endif %}
+ {% if databases %}
+ <div class="list-group">
+ {% for db in databases %}
+ <a href="/web?db={{ db }}" class="list-group-item">
+ {{ db }}
+ {% if manage %}
+ <div class="text-right pull-right">
+ <span data-db="{{ db }}" data-target=".o_database_backup" class="o_database_action btn-link"><i class="fa fa-floppy-o fa-fw"></i> Backup</span>
+ <span data-db="{{ db }}" data-target=".o_database_duplicate" class="o_database_action btn-link"><i class="fa fa-files-o fa-fw"></i> Duplicate</span>
+ <span data-db="{{ db }}" data-target=".o_database_delete" class="o_database_action btn-link"><i class="fa fa-trash-o fa-fw"></i> Delete</span>
+ </div>
+ {% endif %}
+ </a>
+ {% endfor %}
+ </div>
+ {% if manage %}
+ <div class="text-left">
+ <button type="button" data-toggle="modal" data-target=".o_database_create" class="btn btn-sm btn-primary">
+ Create Database
+ </button>
+ <button type="button" data-toggle="modal" data-target=".o_database_restore" class="btn btn-sm btn-primary">
+ Restore Database
+ </button>
+ <button type="button" data-toggle="modal" data-target=".o_database_master" class="btn btn-sm btn-primary">
+ Set Master Password
+ </button>
+ </div>
+ {% else %}
+ <div class="text-center">
+ <a href="/web/database/manager">Manage databases</a>
+ </div>
+ {% endif %}
+ {% else %}
+ <form role="form" action="/web/database/create" method="post">
+ {{ create_form() }}
+ <input type="submit" value="Create database" class="btn btn-primary pull-left"/>
+ </form>
+ {% endif %}
+ </div>
+ </div>
+
+ <!-- Create -->
+ <div class="modal fade o_database_create" role="dialog">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <form role="form" action="/web/database/create" method="post">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <h4 class="modal-title">Create Database</h4>
+ </div>
+ <div class="modal-body">
+ {{ create_form() }}
+ </div>
+ <div class="modal-footer">
+ <input type="submit" value="Continue" class="btn btn-primary pull-right"/>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+
+ <!-- Restore -->
+ <div class="modal fade o_database_restore" role="dialog">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <h4 class="modal-title">Restore Database</h4>
+ </div>
+ <form id="form_restore_db" role="form" action="/web/database/restore" method="post" enctype="multipart/form-data">
+ <div class="modal-body">
+ {{ master_input() }}
+ <div class="form-group">
+ <label for="backup_file" class="control-label">File</label>
+ <input type="file" name="backup_file" class="required"/>
+ </div>
+ <div class="form-group">
+ <label for="name" class="control-label">Database Name</label>
+ <input type="text" name="name" class="form-control" required="required"/>
+ </div>
+ <div class="form-group">
+ <div class="checkbox">
+ <label>
+ <input name="copy" type="checkbox" class="pull-right" value="1">
+ <span>Generate a new database uuid.</span>
+ </label>
+ </div>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <input type="submit" value="Continue" class="btn btn-primary pull-right"/>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
- <script type="text/javascript" src="/web/static/lib/moment/moment.js"></script>
- <script type="text/javascript" src="/web/static/lib/bootstrap-datetimepicker/src/js/bootstrap-datetimepicker.js"></script>
- <link rel="stylesheet" href="/web/static/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css"/>
- <link href="/web/static/lib/fontawesome/css/font-awesome.css" rel="stylesheet"/>
- <link href="/web/static/lib/jquery.textext/jquery.textext.css" rel="stylesheet"/>
- <link href="/web/static/lib/select2/select2.css" rel="stylesheet"/>
- <link href="/web/static/lib/jquery.ui/jquery-ui.css" rel="stylesheet"/>
- <link href="/web/static/lib/jquery.ui.notify/css/ui.notify.css" rel="stylesheet"/>
- <link href="/web/static/lib/bootstrap/css/bootstrap.css" rel="stylesheet"/>
- <link href="/web/static/src/css/base.css" rel="stylesheet"/>
- <link href="/web/static/src/css/data_export.css" rel="stylesheet"/>
- <link href="/base/static/src/css/modules.css" rel="stylesheet"/>
- <script type="text/javascript">
- $(function() {
- odoo.define('web.web_client', function (require) {
- var WebClient = require('web.WebClient');
- var web_client = new WebClient(null, {action: 'database_manager'});
- web_client.setElement($(document.body));
- web_client.start();
- return web_client;
- });
- });
- </script>
- </head>
- <body>
- <nav id="oe_main_menu_navbar" class="navbar navbar-inverse" role="navigation">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
+
+ <!-- Master password -->
+ <div class="modal fade o_database_master" role="dialog">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <h4 class="modal-title">Set Master Password</h4>
+ </div>
+ <form id="form_change_pwd" role="form" action="/web/database/change_password" method="post">
+ <div class="modal-body">
+ <p>The master password is required to create, delete, dump or restore databases.</p>
+ {{ master_input() }}
+ <div class="form-group has-feedback">
+ <label for="master_pwd_new" class="control-label">New Master Password</label>
+ <input type="password" name="master_pwd_new" class="form-control" required="required" autocomplete="off"/>
+ <span class="fa fa-eye o_little_eye form-control-feedback" aria-hidden="true" style="cursor: pointer; pointer-events: auto"></span>
</div>
- <div class="navbar-collapse collapse" id="oe_main_menu_placeholder">
- <ul class="nav navbar-nav navbar-right oe_user_menu_placeholder"></ul>
+ </div>
+ <div class="modal-footer">
+ <input type="submit" value="Continue" class="btn btn-primary pull-right"/>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+
+
+ <!-- Duplicate DB -->
+ <div class="modal fade o_database_duplicate" role="dialog">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <h4 class="modal-title">Duplicate Database</h4>
+ </div>
+ <form id="form-duplicate-db" role="form" action="/web/database/duplicate" method="post">
+ <div class="modal-body">
+ {{ master_input() }}
+ <div class="form-group">
+ <label for="name" class="control-label">Database Name</label>
+ <input type="text" name="name" class="form-control" required="required" readonly="readonly"/>
</div>
- </nav>
- <div class="openerp openerp_webclient_container oe_webclient">
- <div class="oe_leftbar">
- <a class="oe_logo">
- <span class="oe_logo_edit">Edit Company data</span>
- <img src='/web/binary/company_logo'/>
- </a>
- <div class="oe_secondary_menus_container"></div>
- <div class="oe_footer">
- Powered by <a href="http://www.odoo.com" target="_blank"><span>Odoo</span></a>
- </div>
+ <div class="form-group">
+ <label for="new_name" class="control-label">New Name</label>
+ <input type="text" name="new_name" class="form-control" required="required"/>
</div>
- <div class="oe_application">
+ </div>
+ <div class="modal-footer">
+ <input type="submit" value="Continue" class="btn btn-primary pull-right"/>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+
+ <!-- Drop DB -->
+ <div class="modal fade o_database_delete" role="dialog">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <h4 class="modal-title">Delete Database</h4>
+ </div>
+ <form id="form_drop_db" role="form" action="/web/database/drop" method="post">
+ <div class="modal-body">
+ {{ master_input() }}
+ <div class="form-group">
+ <label for="name" class="control-label">Database</label>
+ <input type="text" name="name" class="form-control" required="required" readonly="readonly"/>
</div>
+ </div>
+ <div class="modal-footer">
+ <input type="submit" value="Delete" class="btn btn-primary pull-right"/>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+
+ <!-- Backup DB -->
+ <div class="modal fade o_database_backup" role="dialog">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <h4 class="modal-title">Backup Database</h4>
</div>
+ <form id="form_backup_db" role="form" action="/web/database/backup" method="post">
+ <div class="modal-body">
+ {{ master_input() }}
+ <div class="form-group">
+ <label for="name" class="control-label">Database Name</label>
+ <input type="text" name="name" class="form-control" required="required" readonly="readonly"/>
+ </div>
+ <div class="form-group">
+ <label for="backup_format" class="control-label">Backup Format</label>
+ <select name="backup_format" id="backup_format" class="form-control" required="required">
+ <option value="zip">zip (includes filestore)</option>
+ <option value="dump">pg_dump custom format (without filestore)</option>
+ </select>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <input type="submit" value="Backup" class="btn btn-primary pull-right"/>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
- <!--[if lte IE 8]>
- <script src="//ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js"></script>
- <script>CFInstall.check({mode: "overlay"});</script>
- <![endif]-->
- </body>
+</body>
</html>
diff --git a/addons/web/views/database_selector.html b/addons/web/views/database_selector.html
deleted file mode 100644
index 993cc4b3f99..00000000000
--- a/addons/web/views/database_selector.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE html>
-<html style="height: 100%">
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <title>Odoo</title>
- <link rel="shortcut icon" href="/web/static/src/img/favicon.ico" type="image/x-icon">
- <link rel="stylesheet" href="/web/static/src/css/full.css">
- <link rel="stylesheet" href="/web/static/lib/fontawesome/css/font-awesome.css">
- <link rel="stylesheet" href="/web/static/lib/bootstrap/css/bootstrap.css">
- <link rel="stylesheet" href="/web/static/src/css/base.css">
- <script type="text/javascript">
- function dbchanged() {
- document.getElementById('dbselector').submit();
- }
- </script>
-<body class="oe_single_form">
-
- <div class="oe_single_form_container modal-content">
-
- <form class="oe_dbselector_form" id="dbselector" role="form" action="/web" method="get">
- <div class="oe_single_form_logo">
- <img src="/web/static/src/img/logo2.png"/>
- </div>
-
- <hr/>
-
- {% if error %}
- <p class="alert alert-danger">
- {{ error }}
- </p>
- {% endif %}
-
- <div class="form-group field-db">
- <label for="db" class="control-label">Select database</label>
- {% if databases %}
- <select name="db" id="db" class="form-control" required="required" autofocus="autofocus" onchange="dbchanged()">
- <option></option>
- {% for db in databases %}
- <option value="{{ db }}">{{ db }}</option>
- {% endfor %}
- </select>
- {% else %}
- <input type="text" name="db" id="db" class="form-control" required="required" autofocus="autofocus"/>
- {% endif %}
- </div>
-
- {% if debug %}
- <input type="hidden" name="debug" value=""/>
- {% endif %}
-
- <noscript>
- <hr/>
- <input type="submit" value="Continue" class="btn btn-primary pull-right"/>
- </noscript>
-
- <div class="oe_single_form_footer">
- <a class="oe_login_manage_db" href="/web/database/manager{% if debug %}?debug{% endif %}">Manage Databases</a> |
- <a href="http://www.openerp.com" target="_blank">Powered by <span>OpenERP</span></a>
- </div>
- </form>
-
- </div>
-
-</body>
-</html>
diff --git a/addons/web/views/webclient_templates.xml b/addons/web/views/webclient_templates.xml
index 113b1ef3137..7c5a3c17671 100644
--- a/addons/web/views/webclient_templates.xml
+++ b/addons/web/views/webclient_templates.xml
@@ -121,7 +121,6 @@
<script type="text/javascript" src="/web/static/src/js/framework/session_instance.js"></script>
<script type="text/javascript" src="/web/static/src/js/framework/crash_manager.js"></script>
<script type="text/javascript" src="/web/static/src/js/widgets/change_password.js"></script>
- <script type="text/javascript" src="/web/static/src/js/widgets/database_manager.js"></script>
<script type="text/javascript" src="/web/static/src/js/widgets/debug_manager.js"></script>
<script type="text/javascript" src="/web/static/src/js/widgets/data_export.js"></script>
<script type="text/javascript" src="/web/static/src/js/widgets/date_picker.js"></script>
diff --git a/addons/web_tests_demo/static/test/demo.js b/addons/web_tests_demo/static/test/demo.js
index ae0dcbfaafb..bb8943f47bd 100644
--- a/addons/web_tests_demo/static/test/demo.js
+++ b/addons/web_tests_demo/static/test/demo.js
@@ -63,25 +63,4 @@ odoo.define_section('basic section', [], function (test, mock) {
});
});
- test('JSON-RPC', ['web.DatabaseManager'], function (assert, DatabaseManager) {
- assert.expect(3);
- var fetched_dbs = false, fetched_langs = false;
- mock.add('/web/database/get_list', function () {
- fetched_dbs = true;
- return ['foo', 'bar', 'baz'];
- });
- mock.add('/web/session/get_lang_list', function () {
- fetched_langs = true;
- return [['vo_IS', 'Hopelandic / Vonlenska']];
- });
-
- var dbm = new DatabaseManager({});
- var $fix = $( "#qunit-fixture");
-
- return dbm.appendTo($fix).then(function () {
- assert.ok(fetched_dbs, "should have fetched databases");
- assert.ok(fetched_langs, "should have fetched languages");
- assert.deepEqual(dbm.db_list, ['foo', 'bar', 'baz']);
- });
- });
});