diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index 2e270bd82a0..6f9060c75c7 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -555,7 +555,7 @@ openerp.mail = function(session) { $('
').html(render_res).appendTo(self.$element.find('div.oe_mail_wall_threads')); var thread = new mail.Thread(self, { 'res_model': model_name, 'res_id': parseInt(id), 'uid': self.session.uid, 'records': records, - 'parent_id': false, 'thread_level': 1} + 'parent_id': false, 'thread_level': 2} ); thread.appendTo(self.$element.find('div.oe_mail_wall_thread_content:last')); }); @@ -565,40 +565,41 @@ openerp.mail = function(session) { /** * Add records to sorted_comments array - * @param {Array} records records from mail.message - * @returns {Object} sorted_comments: dict - * sorted_comments.res_model = {res_ids} - * sorted_comments.res_model.res_id = [records] - * sorted = [{'hr_holidays': [{3: 'A'}, {2: 'B'}]}, {'crm': [{3: 'A'}, {2: 'B'}]}] + * @param {Array} records records from mail.message sorted by date desc + * @returns {Object} sc sorted_comments: dict + * sc.model_list = [record.model names] + * sc.models.model = { + * 'id_list': list or root_ids + * 'id_to_anc': {'record_id': [ancestor_ids]}, still sorted by date desc + * 'ids': {'root_id': [records]}, still sorted by date desc + * }, for each model */ sort_comments: function (records) { sc = {'model_list': [], 'models': {}} var cur_iter = 0; var max_iter = 10; var modif = true; /* step1: get roots */ while ( modif && (cur_iter++) < max_iter) { + console.log(cur_iter); modif = false; _(records).each(function (record) { if ($.inArray(record.model, sc['model_list']) == -1) { sc['model_list'].push(record.model); - sc['models'][record.model] = {'id_list': [], 'id_to_root': {}, 'ids': {}}; + sc['models'][record.model] = {'id_list': [], 'id_to_anc': {}, 'ids': {}}; + } + var rmod = sc['models'][record.model]; + if (record.parent_id == false && (_.indexOf(rmod['id_list'], record.id) == -1)) { + rmod['id_list'].push(record.id); + rmod['ids'][record.id] = []; modif = true; - } - var sort_id = (record.parent_id) ? record.parent_id[0]: record.id; - if (record.parent_id == false) { - if (_.indexOf(sc['models'][record.model]['id_list'], sort_id) == -1) { - sc['models'][record.model]['id_list'].push(sort_id); - sc['models'][record.model]['ids'][sort_id] = []; - modif = true; - } - } + } else { - var test = sc['models'][record.model]['id_to_root'][sort_id]; - if (_.indexOf(sc['models'][record.model]['id_list'], sort_id) != -1) { - sc['models'][record.model]['id_to_root'][record.id] = sort_id; + var test = rmod['id_to_anc'][record.parent_id[0]]; + if (_.indexOf(rmod['id_list'], record.parent_id[0]) != -1) { + rmod['id_to_anc'][record.id] = record.parent_id[0]; modif = true; } else if ( test ) { - sc['models'][record.model]['id_to_root'][record.id] = test; + rmod['id_to_anc'][record.id] = test; modif = true; } } @@ -606,7 +607,7 @@ openerp.mail = function(session) { } /* step2: add records */ _(records).each(function (record) { - var root_id = sc['models'][record.model]['id_to_root'][record.id]; + var root_id = sc['models'][record.model]['id_to_anc'][record.id]; if (! root_id) root_id = record.id; sc['models'][record.model]['ids'][root_id].push(record); }); @@ -655,9 +656,7 @@ openerp.mail = function(session) { * Tools: get avatar mini (TODO: should be moved in some tools ?) */ thread_get_mini: function(model, field, id) { - id = id || ''; - var url = this.session.prefix + '/web/binary/image?session_id=' + this.session.session_id + '&model=' + model + '&field=' + field + '&id=' + id; - return url; + return this.session.prefix + '/web/binary/image?session_id=' + this.session.session_id + '&model=' + model + '&field=' + field + '&id=' + (id || ''); }, }); };