From d62fb2bf47ce20a7545773585039a02f23b64f15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 29 Mar 2012 09:32:09 +0200 Subject: [PATCH] [IMP] mail.group: kanban view improved; photo management and code udpated; now has a default photo bzr revid: tde@openerp.com-20120329073209-doh665jwak2e12hk --- addons/mail/mail_group.py | 69 +++++++++++--------- addons/mail/mail_group_view.xml | 11 ++-- addons/mail/static/src/css/mail_group.css | 7 +- addons/mail/static/src/img/groupdefault.png | Bin 0 -> 19910 bytes addons/mail/static/src/js/mail.js | 4 +- 5 files changed, 52 insertions(+), 39 deletions(-) create mode 100644 addons/mail/static/src/img/groupdefault.png diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index a213a6249d9..40c63268704 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -19,13 +19,16 @@ # ############################################################################## -import tools +import datetime as DT +import io +import openerp +import openerp.tools as tools from osv import osv from osv import fields -from tools.translate import _ - -import io, StringIO from PIL import Image +import StringIO +import tools +from tools.translate import _ class mail_group(osv.osv): """ @@ -43,28 +46,30 @@ class mail_group(osv.osv): def action_group_leave(self, cr, uid, ids, context={}): return self.message_unsubscribe(cr, uid, ids, context=context); - def onchange_photo_mini(self, cr, uid, ids, value, context=None): - return {'value': {'photo': value, 'photo_mini': self._photo_resize(cr, uid, value) } } + def onchange_photo(self, cr, uid, ids, value, context=None): + if not value: + return {'value': {'avatar_big': value, 'avatar': value} } + return {'value': {'photo_big': value, 'photo': self._photo_resize(cr, uid, value) } } - def _set_photo_mini(self, cr, uid, id, name, value, args, context=None): - self.write(cr, uid, [id], {'photo': value}, context=context) - return True + def _set_photo(self, cr, uid, id, name, value, args, context=None): + if value: + return self.write(cr, uid, [id], {'photo_big': value}, context=context) + else: + return self.write(cr, uid, [id], {'photo_big': value}, context=context) - def _photo_resize(self, cr, uid, photo, context=None): + def _photo_resize(self, cr, uid, photo, width=128, height=128, context=None): image_stream = io.BytesIO(photo.decode('base64')) img = Image.open(image_stream) - img.thumbnail((120, 100), Image.ANTIALIAS) + img.thumbnail((width, height), Image.ANTIALIAS) img_stream = StringIO.StringIO() img.save(img_stream, "JPEG") return img_stream.getvalue().encode('base64') - def _get_photo_mini(self, cr, uid, ids, name, args, context=None): - result = {} + def _get_photo(self, cr, uid, ids, name, args, context=None): + result = dict.fromkeys(ids, False) for group in self.browse(cr, uid, ids, context=context): - if not group.photo: - result[group.id] = False - else: - result[group.id] = self._photo_resize(cr, uid, group.photo, context=context) + if group.photo_big: + result[group.id] = self._photo_resize(cr, uid, group.photo_big, context=context) return result def is_subscriber(self, cr, uid, ids, name, args, context=None): @@ -73,16 +78,12 @@ class mail_group(osv.osv): result[id] = self.message_is_subscriber(cr, uid, [id], context=context) return result - def get_messages_nbr(self, cr, uid, ids, name, args, context=None): + def get_last_month_msg_nbr(self, cr, uid, ids, name, args, context=None): result = {} + message_obj = self.pool.get('mail.message') for id in ids: - result[id] = self.message_get_messages_nbr(cr, uid, [id], context=context) - return result - - def get_discussions_nbr(self, cr, uid, ids, name, args, context=None): - result = {} - for id in ids: - result[id] = self.message_get_discussions_nbr(cr, uid, [id], context=context) + lower_date = (DT.datetime.now() - DT.timedelta(days=30)).strftime(tools.DEFAULT_SERVER_DATE_FORMAT) + result[id] = message_obj.search(cr, uid, ['&', '&', ('model', '=', self._name), ('res_id', 'in', ids), ('date', '>=', lower_date)], count=True, context=context) return result def get_members_nbr(self, cr, uid, ids, name, args, context=None): @@ -90,27 +91,31 @@ class mail_group(osv.osv): for id in ids: result[id] = len(self.message_get_subscribers_ids(cr, uid, [id], context=context)) return result - + + def _get_default_photo(self, cr, uid, context=None): + avatar_path = openerp.modules.get_module_resource('mail', 'static/src/img', 'groupdefault.png') + return self._photo_resize(cr, uid, open(avatar_path, 'rb').read().encode('base64'), context=context) + _columns = { '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), 'public': fields.boolean('Public', help='This group is visible by non members'), - 'photo': fields.binary('Photo'), - 'photo_mini': fields.function(_get_photo_mini, fnct_inv=_set_photo_mini, string='Photo Mini', type="binary", + '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'], 10), - }), + '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.'), 'joined': fields.function(is_subscriber, type='boolean', string='Joined'), - 'messages_nbr': fields.function(get_messages_nbr, type='integer', string='Messages count'), - 'discussions_nbr': fields.function(get_discussions_nbr, type='integer', string='Discussions count'), + 'last_month_msg_nbr': fields.function(get_last_month_msg_nbr, type='integer', string='Messages count for last month'), 'members_nbr': fields.function(get_members_nbr, type='integer', string='Members count'), } _defaults = { 'public': True, 'responsible_id': (lambda s, cr, uid, ctx: uid), + 'photo': _get_default_photo, } mail_group() diff --git a/addons/mail/mail_group_view.xml b/addons/mail/mail_group_view.xml index 170b4765bde..975b3cfd9ac 100644 --- a/addons/mail/mail_group_view.xml +++ b/addons/mail/mail_group_view.xml @@ -26,15 +26,16 @@ @@ -60,7 +61,7 @@ - + diff --git a/addons/mail/static/src/css/mail_group.css b/addons/mail/static/src/css/mail_group.css index fad7b1a865d..90261499753 100644 --- a/addons/mail/static/src/css/mail_group.css +++ b/addons/mail/static/src/css/mail_group.css @@ -27,7 +27,7 @@ .oe_group_photo { width: 100px; height: auto; - clip: rect(10px, 100px, 110px, 0px); + clip: rect(0px, 100px, 100px, 0px); } .oe_group_photo_wide { @@ -44,6 +44,11 @@ min-height: 120px; } +.oe_group_details a, .oe_group_details a:hover { + font-weight: bold; + color: #4c4c4c; +} + .oe_group_details h4 { margin: 0; font-size: 13px; diff --git a/addons/mail/static/src/img/groupdefault.png b/addons/mail/static/src/img/groupdefault.png new file mode 100644 index 0000000000000000000000000000000000000000..fd8268372668a04b43448d520ae7cf670d4cd0c7 GIT binary patch literal 19910 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 I7s$*12lZE7KmY&$ literal 0 HcmV?d00001 diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index d8792df0eda..a888f092fdc 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -549,6 +549,7 @@ openerp.mail = function(session) { /* DataSets */ this.ds_msg = new session.web.DataSet(this, 'mail.message'); this.ds_thread = new session.web.DataSet(this, 'mail.thread'); + this.ds_groups = new session.web.DataSet(this, 'mail.group'); this.ds_users = new session.web.DataSet(this, 'res.users'); }, @@ -749,7 +750,8 @@ openerp.mail = function(session) { */ do_comment: function () { var body_text = this.$element.find('textarea.oe_mail_wall_action_textarea').val(); - return this.ds_users.call('message_append_note', [[this.session.uid], 'Tweet', body_text, false, 'comment']).then(this.init_comments()); + return this.ds_thread.call('message_append_note', [[], 'Tweet', body_text, false, 'comment']).then(this.init_comments()); + //return this.ds_users.call('message_append_note', [[this.session.uid], 'Tweet', body_text, false, 'comment']).then(this.init_comments()); }, /**