[FIX] web: correct rev 680f955
authorMartin Trigaux <mat@openerp.com>
Wed, 23 Jul 2014 10:19:51 +0000 (12:19 +0200)
committerMartin Trigaux <mat@openerp.com>
Wed, 23 Jul 2014 10:31:25 +0000 (12:31 +0200)
Missing backport of commit f652402 for buffered dataset
Again, should not be forwardported

addons/web/static/src/js/data.js
addons/web/static/src/js/view_form.js
addons/web/static/src/js/view_list.js

index ee24c48..6ae69fb 100644 (file)
@@ -430,12 +430,30 @@ instance.web.DataSet =  instance.web.Class.extend(instance.web.PropertiesMixin,
     read_ids: function (ids, fields, options) {
         if (_.isEmpty(ids))
             return $.Deferred().resolve([]);
-            
+
         options = options || {};
-        // TODO: reorder results to match ids list
-        return this._model.call('read',
-            [ids, fields || false],
-            {context: this.get_context(options.context)});
+        var method = 'read';
+        var ids_arg = ids;
+        var context = this.get_context(options.context);
+        if (options.check_access_rule === true){
+            method = 'search_read';
+            ids_arg = [['id', 'in', ids]];
+            context = new instance.web.CompoundContext(context, {active_test: false});
+        }
+        return this._model.call(method,
+                [ids_arg, fields || false],
+                {context: context})
+            .then(function (records) {
+                if (records.length <= 1) { return records; }
+                var indexes = {};
+                for (var i = 0; i < ids.length; i++) {
+                    indexes[ids[i]] = i;
+                }
+                records.sort(function (a, b) {
+                    return indexes[a.id] - indexes[b.id];
+                });
+                return records;
+        });
     },
     /**
      * Read a slice of the records represented by this DataSet, based on its
index 790fa88..e91955e 100644 (file)
@@ -957,20 +957,17 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
             } else {
                 var fields = _.keys(self.fields_view.fields);
                 fields.push('display_name');
-                // Use of search_read instead of read to check if we can still read the record (security rules)
-                return self.dataset.call('search_read', [[['id', '=', self.dataset.ids[self.dataset.index]]], fields],
+                return self.dataset.read_index(fields,
                     {
                         context: {
                             'bin_size': true,
                             'future_display_name': true
-                        }
+                        },
+                        check_access_rule: true
                     }).then(function(r) {
-                        if (_.isEmpty(r)){
-                            self.do_action('history_back');
-                        }
-                        else{
-                            self.trigger('load_record', r[0]);
-                        }
+                        self.trigger('load_record', r);
+                    }).fail(function (){
+                        self.do_action('history_back');
                     });
             }
         });
index 9d4c781..54f7946 100644 (file)
@@ -529,13 +529,14 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
     reload_record: function (record) {
         var self = this;
         // Use of search_read instead of read to check if we can still read the record (security rules)
-        return this.dataset.call('search_read', [
-            [['id', '=', record.get('id')]],
+        return this.dataset.read_ids(
+            [record.get('id')],
             _.pluck(_(this.columns).filter(function (r) {
                     return r.tag === 'field';
-                }), 'name')]
+                }), 'name'),
+            {check_access_rule: true}
         ).done(function (records) {
-            var values = _.isEmpty(records) ? undefined : records[0];
+            var values = records[0];
             if (!values) {
                 self.records.remove(record);
                 return;