From ce0b92a08b0be8c84da0c90708c44e5ab44ddc93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 19 Jul 2012 14:00:26 +0200 Subject: [PATCH] [IMP] mail.group: cleaned model. Now only have linked user groups, that automatically subscribe its users to the mail.group instead of broadcasting or anything else. Removed old fields, cleaned view. Added code for res.users and res.groups to handle user changes in groups, propagating them to the mail.group attached to the res.group. bzr revid: tde@openerp.com-20120719120026-fi5o23cnh17kapgu --- addons/mail/mail_group.py | 117 ++++++++++++-------------------- addons/mail/mail_group_view.xml | 21 +----- addons/mail/res_users.py | 38 +++++++++++ 3 files changed, 82 insertions(+), 94 deletions(-) diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index 98ee06918e8..9ed282acb0a 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -36,7 +36,7 @@ class mail_group(osv.osv): A mail_group is a collection of users sharing messages in a discussion group. Group users are users that follow the mail group, using the subscription/follow mechanism of OpenSocial. A mail group has nothing - in common wih res.users.group. + in common with res.users.group. Additional information on fields: - ``member_ids``: user member of the groups are calculated with ``message_get_subscribers`` method from mail.thread @@ -110,37 +110,33 @@ class mail_group(osv.osv): 'name': fields.char('Name', size=64, required=True), 'description': fields.text('Description'), 'responsible_id': fields.many2one('res.users', string='Responsible', - ondelete='set null', required=True, select=1, - help="Responsible of the group that has all rights on the record."), + ondelete='set null', required=True, select=1, + help="Responsible of the group that has all rights on the record."), 'public': fields.boolean('Visible by non members', help='This group is visible by non members. \ - Invisible groups can add members through the invite button.'), - 'models': fields.many2many('ir.model', rel='mail_group_ir_model_rel', - id1='mail_group_id', id2='model_id', - string='Linked models', help='Linked models'), - 'groups': fields.many2many('res.groups', rel='mail_group_res_group_rel', - id1='mail_group_id', id2='groups_id', - string='Linked groups', help='Linked groups'), - 'push_to_groups': fields.boolean('Push to groups', - help="When posting a comment on this mail_group, \ - the message is pushed to the users beloging to \ - the linked user groups."), - 'photo_big': fields.binary('Full-size photo', help='Field holding \ - the full-sized PIL-supported and base64 encoded \ - version of the group image. The photo field is \ - used as an interface for this field.'), - 'photo': fields.function(_get_photo, fnct_inv=_set_photo, string='Photo', type="binary", + Invisible groups can add members through the invite button.'), + 'group_ids': fields.many2many('res.groups', rel='mail_group_res_group_rel', + id1='mail_group_id', id2='groups_id', string='Linked groups', + help="Members of those groups will automatically added as followers. "\ + "Note that they will be able to manage their subscription manually "\ + "if necessary."), + 'photo_big': fields.binary('Full-size photo', + help='Field holding the full-sized PIL-supported and base64 encoded "\ + version of the group image. The photo field is used as an "\ + interface for this field.'), + 'photo': fields.function(_get_photo, fnct_inv=_set_photo, + string='Photo', type="binary", store = { 'mail.group': (lambda self, cr, uid, ids, c={}: ids, ['photo_big'], 10), - }, help='Field holding the automatically resized (128x128) PIL-supported and base64 encoded version of the group image.'), + }, + help='Field holding the automatically resized (128x128) PIL-supported and base64 encoded version of the group image.'), 'member_ids': fields.function(get_member_ids, fnct_search=search_member_ids, - type='many2many', relation='res.users', - string='Group members', multi='get_member_ids'), + type='many2many', relation='res.users', string='Group members', multi='get_member_ids'), 'member_count': fields.function(get_member_ids, type='integer', - string='Member count', multi='get_member_ids'), + string='Member count', multi='get_member_ids'), 'is_subscriber': fields.function(get_member_ids, type='boolean', - string='Joined', multi='get_member_ids'), + string='Joined', multi='get_member_ids'), 'last_month_msg_nbr': fields.function(get_last_month_msg_nbr, type='integer', - string='Messages count for last month'), + string='Messages count for last month'), } _defaults = { @@ -148,57 +144,30 @@ class mail_group(osv.osv): 'responsible_id': (lambda s, cr, uid, ctx: uid), 'photo': _get_default_photo, } - - def message_create_get_notification_user_ids(self, cr, uid, thread_ids, new_msg_vals, context=None): - """ Overrider OpenChatter message_create_get_notification_user_ids - method. The purpose is to add to the subscribers users that - belong to the res.groups linked to the mail.group through the - groups field. The fields push_to_groups allows to control this - feature. - """ - notif_user_ids = super(mail_group, self).message_create_get_notification_user_ids(cr, uid, thread_ids, new_msg_vals, context=context) - for thread in self.browse(cr, uid, thread_ids, context=context): - if not thread.push_to_groups or not thread.groups: - continue - for group in thread.groups: - for user in group.users: - notif_user_ids.append(user.id) - return list(set(notif_user_ids)) - - def message_load(self, cr, uid, ids, fetch_ancestors=False, ancestor_ids=None, - limit=100, offset=0, domain=None, count=False, context=None): - """ Override OpenChatter message_load method. - if models attribute is set: search all messages from that model - else: as usual - """ - all_msg_ids = [] - message_obj = self.pool.get('mail.message') - for group in self.browse(cr, uid, ids, context=context): - # call super to have default message ids - group_msg_ids = super(mail_group, self).message_load(cr, uid, ids, fetch_ancestors, ancestor_ids, limit, offset, domain, False, True, context) - group_domain = ['&', ('model', '=', self._name), ('id', 'in', group_msg_ids)] - # if no linked domain: go on - if not group.models: - search_domain = group_domain - # add message ids linked to group models - else: - model_list = [] - for model in group.models: - model_list.append(model.model) - search_domain = [('|')] + group_domain - search_domain += [('model', 'in', model_list)] - # perform the search - msg_ids = message_obj.search(cr, uid, search_domain, limit=limit, offset=offset, context=context) - if (fetch_ancestors): msg_ids = self._message_load_add_ancestor_ids(cr, uid, ids, msg_ids, ancestor_ids, context=context) - all_msg_ids += msg_ids - if count: - return len(all_msg_ids) - else: - return message_obj.read(cr, uid, all_msg_ids, context=context) - + + def create(self, cr, uid, vals, context=None): + mail_group_id = super(mail_group, self).create(cr, uid, vals, context=context) + if vals.get('group_ids'): + user_goup_ids = vals.get('group_ids')[0][2] + res_groups_obj = self.pool.get('res.groups') + user_ids = [] + for group in res_groups_obj.browse(cr, uid, user_goup_ids, context=None): + user_ids += [user.id for user in group.users] + self.message_subscribe(cr, uid, [mail_group_id], user_ids, context=context) + return mail_group_id + + def write(self, cr, uid, ids, vals, context=None): + if vals.get('group_ids'): + user_goup_ids = vals.get('group_ids')[0][2] + res_groups_obj = self.pool.get('res.groups') + user_ids = [] + for group in res_groups_obj.browse(cr, uid, user_goup_ids, context=None): + user_ids += [user.id for user in group.users] + self.message_subscribe(cr, uid, ids, user_ids, context=context) + return super(mail_group, self).write(cr, uid, ids, vals, context=context) + def action_group_join(self, cr, uid, ids, context=None): return self.message_subscribe(cr, uid, ids, context=context) def action_group_leave(self, cr, uid, ids, context=None): return self.message_unsubscribe(cr, uid, ids, context=context) - diff --git a/addons/mail/mail_group_view.xml b/addons/mail/mail_group_view.xml index f5443fcf0d7..c755209f952 100644 --- a/addons/mail/mail_group_view.xml +++ b/addons/mail/mail_group_view.xml @@ -64,6 +64,7 @@ + @@ -71,26 +72,6 @@ -
- - -

Models for automatic message fetching

- - - - - -
- -

User groups for message forwarding

- - - - - -
-
-