@@ -185,8 +185,8 @@ def get_messages(self, cr, uid, last=None, users_watch=None, uuid=None, context=
185
185
def post (self , cr , uid , message , to_session_id , technical = False , uuid = None , context = None ):
186
186
assert_uuid (uuid )
187
187
my_id = self .pool .get ('im.user' ).get_my_id (cr , uid , uuid )
188
- session = self .pool .get ('im.session' ).browse (cr , uid , to_session_id , context )
189
- to_ids = [x . id for x in session . user_ids if x . id != my_id ]
188
+ session_user_ids = self .pool .get ('im.session' ).get_session_users (cr , uid , to_session_id , context = context ). get ( "user_ids" , [] )
189
+ to_ids = [user_id for user_id in session_user_ids if user_id != my_id ]
190
190
self .create (cr , openerp .SUPERUSER_ID , {"message" : message , 'from_id' : my_id ,
191
191
'to_id' : [(6 , 0 , to_ids )], 'session_id' : to_session_id , 'technical' : technical }, context = context )
192
192
notify_channel (cr , "im_channel" , {'type' : 'message' , 'receivers' : [my_id ] + to_ids })
@@ -202,7 +202,7 @@ def _calc_name(self, cr, uid, ids, something, something_else, context=None):
202
202
return res
203
203
204
204
_columns = {
205
- 'user_ids' : fields .many2many ('im.user' ),
205
+ 'user_ids' : fields .many2many ('im.user' , 'im_session_im_user_rel' , 'im_session_id' , 'im_user_id' , 'Users' ),
206
206
"name" : fields .function (_calc_name , string = "Name" , type = 'char' ),
207
207
}
208
208
@@ -225,6 +225,9 @@ def session_get(self, cr, uid, users_to, uuid=None, context=None):
225
225
}, context = context )
226
226
return self .read (cr , uid , session_id , context = context )
227
227
228
+ def get_session_users (self , cr , uid , session_id , context = None ):
229
+ return self .read (cr , openerp .SUPERUSER_ID , session_id , ['user_ids' ], context = context )
230
+
228
231
def add_to_session (self , cr , uid , session_id , user_id , uuid = None , context = None ):
229
232
my_id = self .pool .get ("im.user" ).get_my_id (cr , uid , uuid , context = context )
230
233
session = self .read (cr , uid , session_id , context = context )
@@ -259,7 +262,7 @@ def _status_search(self, cr, uid, obj, name, domain, context=None):
259
262
return ['&' , ('im_last_status' , '=' , True ), ('im_last_status_update' , '>' , (current - delta ).strftime (DEFAULT_SERVER_DATETIME_FORMAT ))]
260
263
else :
261
264
return ['|' , ('im_last_status' , '=' , False ), ('im_last_status_update' , '<=' , (current - delta ).strftime (DEFAULT_SERVER_DATETIME_FORMAT ))]
262
-
265
+ # TODO: Remove fields arg in trunk. Also in im.js.
263
266
def search_users (self , cr , uid , text_search , fields , limit , context = None ):
264
267
my_id = self .get_my_id (cr , uid , None , context )
265
268
group_employee = self .pool ['ir.model.data' ].get_object_reference (cr , uid , 'base' , 'group_user' )[1 ]
@@ -271,7 +274,7 @@ def search_users(self, cr, uid, text_search, fields, limit, context=None):
271
274
if len (found ) < limit :
272
275
found += self .search (cr , uid , [["name" , "ilike" , text_search ], ["id" , "<>" , my_id ], ["uuid" , "=" , False ], ["im_status" , "=" , False ], ["id" , "not in" , found ]],
273
276
order = "name asc" , limit = limit - len (found ), context = context )
274
- users = self .read (cr , uid , found , fields , context = context )
277
+ users = self .read (cr ,openerp . SUPERUSER_ID , found , [ "name" , "user_id" , "uuid" , "im_status" ] , context = context )
275
278
users .sort (key = lambda obj : found .index (obj ['id' ]))
276
279
return users
277
280
@@ -319,6 +322,9 @@ def _get_name(self, cr, uid, ids, name, arg, context=None):
319
322
continue
320
323
return res
321
324
325
+ def get_users (self , cr , uid , ids , context = None ):
326
+ return self .read (cr ,openerp .SUPERUSER_ID , ids , ["name" , "im_status" , "uuid" ], context = context )
327
+
322
328
_columns = {
323
329
'name' : fields .function (_get_name , type = 'char' , size = 200 , string = "Name" , store = True , readonly = True ),
324
330
'assigned_name' : fields .char (string = "Assigned Name" , size = 200 , required = False ),
@@ -341,3 +347,16 @@ def _get_name(self, cr, uid, ids, name, arg, context=None):
341
347
('user_uniq' , 'unique (user_id)' , 'Only one chat user per OpenERP user.' ),
342
348
('uuid_uniq' , 'unique (uuid)' , 'Chat identifier already used.' ),
343
349
]
350
+
351
+ class res_users (osv .osv ):
352
+ _inherit = "res.users"
353
+
354
+ def _get_im_user (self , cr , uid , ids , field_name , arg , context = None ):
355
+ result = dict .fromkeys (ids , False )
356
+ for index , im_user in enumerate (self .pool ['im.user' ].search_read (cr , uid , domain = [('user_id' , 'in' , ids )], fields = ['name' , 'user_id' ], context = context )):
357
+ result [ids [index ]] = im_user .get ('user_id' ) and (im_user ['user_id' ][0 ], im_user ['name' ]) or False
358
+ return result
359
+
360
+ _columns = {
361
+ 'im_user_id' : fields .function (_get_im_user , type = 'many2one' , string = "IM User" , relation = "im.user" ),
362
+ }
0 commit comments