diff options
Diffstat (limited to 'addons/web')
| -rw-r--r-- | addons/web/controllers/main.py | 29 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_form.js | 28 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_list_editable.js | 5 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_tree.js | 22 | ||||
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 9 | ||||
| -rw-r--r-- | addons/web/views/database_manager.html | 4 | ||||
| -rw-r--r-- | addons/web/views/database_selector.html | 2 |
7 files changed, 60 insertions, 39 deletions
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index e95e8f3c58b..cec9ae94837 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -744,24 +744,21 @@ class Database(http.Controller): return {'error': _('Could not drop database !'), 'title': _('Drop Database')} @http.route('/web/database/backup', type='http', auth="none") - def backup(self, backup_db, backup_pwd, token, **kwargs): + def backup(self, backup_db, backup_pwd, token, backup_format='zip'): try: - format = kwargs.get('format') - ext = "zip" if format == 'zip' else "dump" - db_dump = base64.b64decode( - request.session.proxy("db").dump(backup_pwd, backup_db, format)) - filename = "%(db)s_%(timestamp)s.%(ext)s" % { - 'db': backup_db, - 'timestamp': datetime.datetime.utcnow().strftime( - "%Y-%m-%d_%H-%M-%SZ"), - 'ext': ext - } - return request.make_response(db_dump, - [('Content-Type', 'application/octet-stream; charset=binary'), - ('Content-Disposition', content_disposition(filename))], - {'fileToken': token} - ) + openerp.service.security.check_super(backup_pwd) + ts = datetime.datetime.utcnow().strftime("%Y-%m-%d_%H-%M-%S") + filename = "%s_%s.%s" % (backup_db, 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) + 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')}]]) @http.route('/web/database/restore', type='http', auth="none") diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 296c78d8d6d..abbc1330804 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -3554,7 +3554,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc reinit_value: function(val) { this.internal_set_value(val); this.floating = false; - if (this.is_started) + if (this.is_started && !this.no_rerender) this.render_value(); }, initialize_field: function() { @@ -3805,7 +3805,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc } if (! no_recurse) { var dataset = new instance.web.DataSetStatic(this, this.field.relation, self.build_context()); - this.alive(dataset.name_get([self.get("value")])).done(function(data) { + var def = this.alive(dataset.name_get([self.get("value")])).done(function(data) { if (!data[0]) { self.do_warn(_t("Render"), _t("No value found for the field "+self.field.string+" for value "+self.get("value"))); return; @@ -3818,6 +3818,9 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc self.display_value["" + self.get("value")] = self.display_value_backup["" + self.get("value")]; self.render_value(true); }); + if (this.view && this.view.render_value_defs){ + this.view.render_value_defs.push(def); + } } }, display_string: function(str) { @@ -4293,7 +4296,7 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({ this.dataset.index = 0; } this.trigger_on_change(); - if (this.is_started) { + if (this.is_started && !this.no_rerender) { return self.reload_current_view(); } else { return $.when(); @@ -4437,12 +4440,19 @@ instance.web.form.One2ManyListView = instance.web.ListView.extend({ return true; } var r; - return _.every(this.records.records, function(record){ + if (_.isEmpty(this.records.records)){ + return true; + } + current_values = {}; + _.each(this.editor.form.fields, function(field){ + field._inhibit_on_change_flag = true; + field.no_rerender = true; + current_values[field.name] = field.get('value'); + }); + var valid = _.every(this.records.records, function(record){ r = record; _.each(self.editor.form.fields, function(field){ - field._inhibit_on_change_flag = true; field.set_value(r.attributes[field.name]); - field._inhibit_on_change_flag = false; }); return _.every(self.editor.form.fields, function(field){ field.process_modifiers(); @@ -4450,6 +4460,12 @@ instance.web.form.One2ManyListView = instance.web.ListView.extend({ return field.is_valid(); }); }); + _.each(this.editor.form.fields, function(field){ + field.set('value', current_values[field.name]); + field._inhibit_on_change_flag = false; + field.no_rerender = false; + }); + return valid; }, do_add_record: function () { if (this.editable()) { diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index 831d383c731..77559504060 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -231,8 +231,9 @@ this.records.add(record, { at: this.prepends_on_create() ? 0 : null}); } - - return this.ensure_saved().then(function () { + return this.ensure_saved().then(function(){ + return $.when.apply(null, self.editor.form.render_value_defs); + }).then(function () { var $recordRow = self.groups.get_row_for(record); var cells = self.get_cells_for($recordRow); var fields = {}; diff --git a/addons/web/static/src/js/view_tree.js b/addons/web/static/src/js/view_tree.js index 68915077a48..06e19e28ca9 100644 --- a/addons/web/static/src/js/view_tree.js +++ b/addons/web/static/src/js/view_tree.js @@ -222,27 +222,25 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie var local_context = { active_model: self.dataset.model, active_id: id, - active_ids: [id]}; + active_ids: [id] + }; + var ctx = instance.web.pyeval.eval( + 'context', new instance.web.CompoundContext( + this.dataset.get_context(), local_context)); return this.rpc('/web/treeview/action', { id: id, model: this.dataset.model, - context: instance.web.pyeval.eval( - 'context', new instance.web.CompoundContext( - this.dataset.get_context(), local_context)) + context: ctx }).then(function (actions) { if (!actions.length) { return; } var action = actions[0][2]; - var c = new instance.web.CompoundContext(local_context); + var c = new instance.web.CompoundContext(local_context).set_eval_context(ctx); if (action.context) { c.add(action.context); } - return instance.web.pyeval.eval_domains_and_contexts({ - contexts: [c], domains: [] - }).then(function (res) { - action.context = res.context; - return self.do_action(action); - }, null); - }, null); + action.context = c; + return self.do_action(action); + }); }, // show & hide the contents diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index b0bceafc5a3..7d053f81700 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -216,6 +216,15 @@ </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><label for="backup_pwd">Master Password:</label></td> <td><input type="password" name="backup_pwd" class="required" /></td> </tr> diff --git a/addons/web/views/database_manager.html b/addons/web/views/database_manager.html index da2c1a9f41a..79a193f283f 100644 --- a/addons/web/views/database_manager.html +++ b/addons/web/views/database_manager.html @@ -3,7 +3,7 @@ <head> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <title>OpenERP</title> + <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> @@ -104,4 +104,4 @@ <script>CFInstall.check({mode: "overlay"});</script> <![endif]--> </body> -</html>
\ No newline at end of file +</html> diff --git a/addons/web/views/database_selector.html b/addons/web/views/database_selector.html index 8164ddb9498..67c82c6c260 100644 --- a/addons/web/views/database_selector.html +++ b/addons/web/views/database_selector.html @@ -2,7 +2,7 @@ <html style="height: 100%"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> - <title>OpenERP</title> + <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"> |
