From 353a5aabeb8c7fa2053d71a313e8f02f82770350 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 21 Feb 2012 09:30:05 +0100 Subject: [PATCH 01/30] [ADD] res.users: added photo field bzr revid: tde@openerp.com-20120221083005-6lpz3208cgzwpcau --- openerp/addons/base/res/res_users.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index f148813ae05..ae1f1f9fe91 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -241,6 +241,7 @@ class users(osv.osv): "otherwise leave empty. After a change of password, the user has to login again."), 'user_email': fields.char('Email', size=64), 'signature': fields.text('Signature', size=64), + 'photo': fields.binary('Photo'), 'active': fields.boolean('Active'), 'action_id': fields.many2one('ir.actions.actions', 'Home Action', help="If specified, this action will be opened at logon for this user, in addition to the standard menu."), 'menu_id': fields.many2one('ir.actions.actions', 'Menu Action', help="If specified, the action will replace the standard menu for this user."), From 5d267e015860ec8ef3de64768a7238c62e60c1c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 21 Feb 2012 09:30:49 +0100 Subject: [PATCH 02/30] [ADD] Added default user photo file bzr revid: tde@openerp.com-20120221083049-crwehkw9qxwzlmmb --- openerp/addons/base/images/photo.png | Bin 0 -> 2685 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 openerp/addons/base/images/photo.png diff --git a/openerp/addons/base/images/photo.png b/openerp/addons/base/images/photo.png new file mode 100644 index 0000000000000000000000000000000000000000..1d124127b2bf7115fdb38ab2fc136fdf5b531237 GIT binary patch literal 2685 zcmV-@3WD{CP)@cEZEfxEk3asno3<^Q<_tXZ%rjptisIYOxmYO`k|dEhj$y6UT5BSrwW26~{@7!W z4W?ytDg>T*;)!H-cJ@bQSsn&Z0w~fnt+Ff&aU4?|$JSb#0!W>6rYy_fJo@OPzn|DJ z05uIIb8~Y)b0#_|B70 zJ{e7Ff1*YF^wUrGwAPOR820=9t-)Y$WoBk(n}`Y#aUle8&Y`L*4WQCm2j?7#h#{i6 zg9i`(1i;TeH3G(%FL>|6)vH$rhYugVHZwERUt3!nZES2*Q55mw;-Xk<5kd&gIUbEh z6hg2egbYBZEX#wF*q@kywf6Iyo15;ThaM^x78XX<+T#BE?{`Y6aQ^&xxp3hEhQlH5 zzWeTwBngZ$l~QW7y}douS{EUNxu>3b%1#nqC(Q!~XJ=>q+}vEPl&Y0dL2Dhf)^hy# zaXESNWIK)ku!wkOt_Oob{pzc)*2Wl)qUb&VZ{I0^i54+4ck?`FrIaV4pp*(qDG(8e z2qMz_^dyj~AjVOioUL(A3-#+%< zW70e{5dmXNIXgSs0^4&;`~4Up0l;w_OQ+L86h&7i!Ena}UU}t}Kp!}8z+-|13`{_v z)9L)9uIsMWS_6ng#E6J)35)@6!IOw+5wXqq$a|j<(d(ZIffFZAlp%z-8@EXTq(l?} z(DYFocdPczCjc@LNvf*ijg5^rKNSK15JLFva5&r+kz7PNA%ujPt%xXQMkCaSX68sl zvJgVf%rP@Refsoi{?rJZI(6zT0KX0)WX#+RA#_3rQ3JLG4rW%&Y?wJ=<~)Rud+$G3 zUS9s^B=#pJ001XXp1k0_-)81cLm&+yjL!lwvkDYTG71kKD8LZGH^LkNj;E-lM43L*SyDz>Mgq^hbv)OBr`Icwf>q6dp?Y)Qho*FVHgb;0SZ`*#q z|F>z_1*Sv*0HP>*>(Zr5)_ZT8J-=$+JT)_+opa{>_un^JmQ9qr#@p1&Dp{6Y9F0bb znGFEN%!-;M&|LM(%8FiCSfIgR@XoaCPK^LF*M|-rqLq~uSZmed;v(AJW>r;KSy{pS z{52$uKwXTS$ zBqB#dfrz+~KtxVNN+K$=Ec^bn>`qLeD2n;@_4V)Od9DCl6Okb^S0WOaSpZ1WF98hF zH0{sL&CM1?@x7|5mL|1-$1b$Bwe`iSs=jWmJ=E*AzTX~Y#U>Clu`pCD$25SWm$?+3Q-hMk|b6{5^HTINs<`=Ga}LjkO4@Td8Cwj z%{lkGJkPhLN?>bi>;BPb^i8ex=h8G~A}WkABM}*Dtp`LjAfgd7kF?fRUDsYjxX~>{ zL|SX5wKmO}Aq9{(;5*HBJQI-=fFYs_BJxs_ByUYjV0Cr%2LQg(>2ykK?NDnyP)ZGn zXb51Wlq!g*1W*I;L=^CmD~u~Ae021*jl?3-9&mC1xrlT`q(elBi2OB8(_i5hu60WS ztE;O&^xmK7^?HLONp=A25Ya$uJ=9v4L{y82BO)&%Ohnv({y3%W@k}>FGGm;6>ynAHTy2+xSDF`7F!~?7CMfBDweeV87q*b-UebH!9dOk(FinwJ3_n7&8Je z5|M(L9T9nMwBy#Ua;HRCDb>1FAtJ-ZK5MNX-0Q)c2&}BESZ01$Ywd}s5|IkK)5;nY$%*;k96|b+aKYSyB>lX3LFTYG#mL0t7uDf&; zMTz&mCnBDRED;sn`7dIFTU6bA^iB>d+$9uKR;htYe(Muk%*L9>$=zL)m2sbvMgPm z=i~8woWx$qjBbz?cq^8fO0r0PuI63008IC zom1ZXdqm_b_uY5jgG)JyIk0%8R2U2f-WcOs0z|}(ueSN&#t=JRy;e#oYKpYoAp<(+rlSwC~;%uQR0TW%%Jo;|CUmzQ-}mWx$YJ+QR2 zbR^5N12Z!-y>7Q_j4|zgpPR_hZl47Jm|2bu)lO}0f{*M4VbXJ;@NTwGgQ z`&X~mdvpK({a0Uj;RV?X_-zr`Yi0oGG);A<)1k|kFVA}K=S3tn#>CFKn3 Date: Tue, 21 Feb 2012 09:49:39 +0100 Subject: [PATCH 03/30] [IMP] res.users: added photo in form view bzr revid: tde@openerp.com-20120221084939-2eewuecsd476f2jt --- openerp/addons/base/base_update.xml | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/openerp/addons/base/base_update.xml b/openerp/addons/base/base_update.xml index c5594f76e22..0ed0b525e5c 100644 --- a/openerp/addons/base/base_update.xml +++ b/openerp/addons/base/base_update.xml @@ -122,11 +122,17 @@ - - - - - + + + + + + + + + + + From 2388c019f15191adff1578ad7f6378aefc509823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 21 Feb 2012 09:56:06 +0100 Subject: [PATCH 04/30] [IMP] res.users: added default photo (base/images/photo.png) bzr revid: tde@openerp.com-20120221085606-h5wufginyq4su9sw --- openerp/addons/base/res/res_users.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index ae1f1f9fe91..9b6a66d3b82 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -353,9 +353,14 @@ class users(osv.osv): pass return result + def _get_photo(self, cr, uid, context=None): + photo_path = openerp.modules.get_module_resource('base','images','photo.png') + return open(photo_path, 'rb').read().encode('base64') + _defaults = { 'password' : '', 'context_lang': 'en_US', + 'photo': _get_photo, 'active' : True, 'menu_id': _get_menu, 'company_id': _get_company, From 0e6c779ae2a213e748a9199d127259afa2c67117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 21 Feb 2012 10:12:57 +0100 Subject: [PATCH 05/30] [ADD] Added photo_mini field, holding a resized version of photo. Added resizing method. bzr revid: tde@openerp.com-20120221091257-r2g306wgkalcpyrl --- openerp/addons/base/res/res_users.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 9b6a66d3b82..5907840cd5b 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -35,6 +35,9 @@ from tools.translate import _ import openerp import openerp.exceptions +import io, StringIO +from PIL import Image + _logger = logging.getLogger(__name__) class groups(osv.osv): @@ -200,6 +203,20 @@ class users(osv.osv): self.write(cr, uid, ids, {'groups_id': [(4, extended_group_id)]}, context=context) return True + def _get_photo_mini(self, cr, uid, ids, name, args, context=None): + result = {} + for obj in self.browse(cr, uid, ids, context=context): + if not obj.photo: + result[obj.id] = False + continue + + image_stream = io.BytesIO(obj.photo.decode('base64')) + img = Image.open(image_stream) + img.thumbnail((120, 100), Image.ANTIALIAS) + img_stream = StringIO.StringIO() + img.save(img_stream, "JPEG") + result[obj.id] = img_stream.getvalue().encode('base64') + return result def _get_interface_type(self, cr, uid, ids, name, args, context=None): """Implementation of 'view' function field getter, returns the type of interface of the users. @@ -242,6 +259,10 @@ class users(osv.osv): 'user_email': fields.char('Email', size=64), 'signature': fields.text('Signature', size=64), 'photo': fields.binary('Photo'), + 'photo_mini': fields.function(_get_photo_mini, string='Photo Mini', type="binary", + store = { + 'res.users': (lambda self, cr, uid, ids, c={}: ids, ['photo'], 10), + }), 'active': fields.boolean('Active'), 'action_id': fields.many2one('ir.actions.actions', 'Home Action', help="If specified, this action will be opened at logon for this user, in addition to the standard menu."), 'menu_id': fields.many2one('ir.actions.actions', 'Menu Action', help="If specified, the action will replace the standard menu for this user."), From 42806faa81f5025cda6ec3bccbfc2e924f2bda9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 21 Feb 2012 10:23:54 +0100 Subject: [PATCH 06/30] [ADD] res.users: preferences screen: added photo field bzr revid: tde@openerp.com-20120221092354-x4hw1uqk8afk0k08 --- openerp/addons/base/base_update.xml | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/openerp/addons/base/base_update.xml b/openerp/addons/base/base_update.xml index 0ed0b525e5c..af915e083aa 100644 --- a/openerp/addons/base/base_update.xml +++ b/openerp/addons/base/base_update.xml @@ -84,12 +84,18 @@
- - - - - - + + + + + + + + + + + + @@ -131,7 +137,7 @@ - + From 4183dcb27e79fa843b3b3e64879bb885ac86a744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 21 Feb 2012 11:04:51 +0100 Subject: [PATCH 07/30] [IMP] res.users: form view: cleaned code tabulations, added names to fields for inheritance bzr revid: tde@openerp.com-20120221100451-2kl56w08ggdtxtj5 --- openerp/addons/base/base_update.xml | 54 ++++++++++++++--------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/openerp/addons/base/base_update.xml b/openerp/addons/base/base_update.xml index af915e083aa..250305ca7db 100644 --- a/openerp/addons/base/base_update.xml +++ b/openerp/addons/base/base_update.xml @@ -124,38 +124,38 @@ - - - - - - - - - + + + + + + + + + + + + + + - - - + + + + + + + + - - - - - - - - + + + + - - - - - - From ac1f134ac94b0bfacdae301f931220d2b03e3da7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 21 Feb 2012 11:12:05 +0100 Subject: [PATCH 08/30] [REF] Removed unused group names bzr revid: tde@openerp.com-20120221101205-akwdpwn09ytnagp1 --- openerp/addons/base/base_update.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openerp/addons/base/base_update.xml b/openerp/addons/base/base_update.xml index 250305ca7db..983ef792e25 100644 --- a/openerp/addons/base/base_update.xml +++ b/openerp/addons/base/base_update.xml @@ -127,8 +127,8 @@ - - + + From c9d383613a0996aed2a4f680147921ccbbbefeec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 21 Feb 2012 12:35:23 +0100 Subject: [PATCH 09/30] [IMP] res.users: added photo_calc for calculated photo; can be overriden to display photo from another module (ex: hr). By default, photo_calc is the photo defined in the user. bzr revid: tde@openerp.com-20120221113523-1o3j83a9hrtcojh9 --- openerp/addons/base/res/res_users.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 5907840cd5b..4e52771b97d 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -218,6 +218,18 @@ class users(osv.osv): result[obj.id] = img_stream.getvalue().encode('base64') return result + def _get_photo_calc(self, cr, uid, ids, name, args, context=None): + result = {} + for user in self.browse(cr, uid, ids, context=context): + result[user.id] = user.photo + return result + + def _get_photo_calc_mini(self, cr, uid, ids, name, args, context=None): + result = {} + for user in self.browse(cr, uid, ids, context=context): + result[user.id] = user.photo_mini + return result + def _get_interface_type(self, cr, uid, ids, name, args, context=None): """Implementation of 'view' function field getter, returns the type of interface of the users. @param field_name: Name of the field @@ -258,11 +270,13 @@ class users(osv.osv): "otherwise leave empty. After a change of password, the user has to login again."), 'user_email': fields.char('Email', size=64), 'signature': fields.text('Signature', size=64), - 'photo': fields.binary('Photo'), - 'photo_mini': fields.function(_get_photo_mini, string='Photo Mini', type="binary", + 'photo': fields.binary('User Photo'), + 'photo_mini': fields.function(_get_photo_mini, string='User Photo Mini', type="binary", store = { 'res.users': (lambda self, cr, uid, ids, c={}: ids, ['photo'], 10), }), + 'photo_calc': fields.function(_get_photo_calc, string='Photo', type="binary", readonly=True), + 'photo_calc_mini': fields.function(_get_photo_calc_mini, string='Photo Mini', type="binary", readonly=True), 'active': fields.boolean('Active'), 'action_id': fields.many2one('ir.actions.actions', 'Home Action', help="If specified, this action will be opened at logon for this user, in addition to the standard menu."), 'menu_id': fields.many2one('ir.actions.actions', 'Menu Action', help="If specified, the action will replace the standard menu for this user."), From 3276c17594fb6be17f936eb3c98113d7dd1d7984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 21 Feb 2012 14:30:25 +0100 Subject: [PATCH 10/30] [IMP] Cleaned photo display in res.users form: now in preferences column bzr revid: tde@openerp.com-20120221133025-6guy20g2hdd3se4o --- openerp/addons/base/base_update.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openerp/addons/base/base_update.xml b/openerp/addons/base/base_update.xml index 983ef792e25..04d72a480f3 100644 --- a/openerp/addons/base/base_update.xml +++ b/openerp/addons/base/base_update.xml @@ -129,14 +129,13 @@ in simplified view --> + - - From 8413a61979942ab16fbebd1add8dcacfb29a36ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 21 Feb 2012 16:15:42 +0100 Subject: [PATCH 11/30] [IMP] Removed calculated photo. res.users do not have to be aware it will be inherited. We won't make links between employee photo and user photo: user photo will be used. bzr revid: tde@openerp.com-20120221151542-u2ic748f0wtnvrsr --- openerp/addons/base/res/res_users.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 4e52771b97d..6ec8b6fd72f 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -218,18 +218,6 @@ class users(osv.osv): result[obj.id] = img_stream.getvalue().encode('base64') return result - def _get_photo_calc(self, cr, uid, ids, name, args, context=None): - result = {} - for user in self.browse(cr, uid, ids, context=context): - result[user.id] = user.photo - return result - - def _get_photo_calc_mini(self, cr, uid, ids, name, args, context=None): - result = {} - for user in self.browse(cr, uid, ids, context=context): - result[user.id] = user.photo_mini - return result - def _get_interface_type(self, cr, uid, ids, name, args, context=None): """Implementation of 'view' function field getter, returns the type of interface of the users. @param field_name: Name of the field @@ -275,8 +263,6 @@ class users(osv.osv): store = { 'res.users': (lambda self, cr, uid, ids, c={}: ids, ['photo'], 10), }), - 'photo_calc': fields.function(_get_photo_calc, string='Photo', type="binary", readonly=True), - 'photo_calc_mini': fields.function(_get_photo_calc_mini, string='Photo Mini', type="binary", readonly=True), 'active': fields.boolean('Active'), 'action_id': fields.many2one('ir.actions.actions', 'Home Action', help="If specified, this action will be opened at logon for this user, in addition to the standard menu."), 'menu_id': fields.many2one('ir.actions.actions', 'Menu Action', help="If specified, the action will replace the standard menu for this user."), From dc6b84ab97e899d28d13eb278a001c95e2777adc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 21 Feb 2012 16:29:10 +0100 Subject: [PATCH 12/30] [IMP] Renamed photo field to avatar. Propagated changes. Modified user view: photo is now on the left of users tab. bzr revid: tde@openerp.com-20120221152910-mw9zm3fnbyxbmqq8 --- openerp/addons/base/base_update.xml | 25 ++++++++++++------------- openerp/addons/base/res/res_users.py | 26 +++++++++++++++----------- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/openerp/addons/base/base_update.xml b/openerp/addons/base/base_update.xml index 04d72a480f3..0eef0a0f4cb 100644 --- a/openerp/addons/base/base_update.xml +++ b/openerp/addons/base/base_update.xml @@ -93,8 +93,8 @@ - - + + @@ -124,20 +124,19 @@ - + - + + + + + - - - - - - - - + + + @@ -149,7 +148,7 @@ - + diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 6ec8b6fd72f..7936ec2f5c9 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -203,21 +203,25 @@ class users(osv.osv): self.write(cr, uid, ids, {'groups_id': [(4, extended_group_id)]}, context=context) return True - def _get_photo_mini(self, cr, uid, ids, name, args, context=None): + def _get_avatar_mini(self, cr, uid, ids, name, args, context=None): result = {} for obj in self.browse(cr, uid, ids, context=context): - if not obj.photo: + if not obj.avatar: result[obj.id] = False continue - image_stream = io.BytesIO(obj.photo.decode('base64')) + image_stream = io.BytesIO(obj.avatar.decode('base64')) img = Image.open(image_stream) - img.thumbnail((120, 100), Image.ANTIALIAS) + img.thumbnail((180, 150), Image.ANTIALIAS) img_stream = StringIO.StringIO() img.save(img_stream, "JPEG") result[obj.id] = img_stream.getvalue().encode('base64') return result + def _set_avatar_mini(self, cr, uid, id, name, value, args, context=None): + self.write(cr, uid, [id], {'avatar': value}, context=context) + return True + def _get_interface_type(self, cr, uid, ids, name, args, context=None): """Implementation of 'view' function field getter, returns the type of interface of the users. @param field_name: Name of the field @@ -258,10 +262,10 @@ class users(osv.osv): "otherwise leave empty. After a change of password, the user has to login again."), 'user_email': fields.char('Email', size=64), 'signature': fields.text('Signature', size=64), - 'photo': fields.binary('User Photo'), - 'photo_mini': fields.function(_get_photo_mini, string='User Photo Mini', type="binary", + 'avatar': fields.binary('User Avatar'), + 'avatar_mini': fields.function(_get_avatar_mini, fnct_inv=_set_avatar_mini, string='User Avatar Mini', type="binary", store = { - 'res.users': (lambda self, cr, uid, ids, c={}: ids, ['photo'], 10), + 'res.users': (lambda self, cr, uid, ids, c={}: ids, ['avatar'], 10), }), 'active': fields.boolean('Active'), 'action_id': fields.many2one('ir.actions.actions', 'Home Action', help="If specified, this action will be opened at logon for this user, in addition to the standard menu."), @@ -374,14 +378,14 @@ class users(osv.osv): pass return result - def _get_photo(self, cr, uid, context=None): - photo_path = openerp.modules.get_module_resource('base','images','photo.png') - return open(photo_path, 'rb').read().encode('base64') + def _get_avatar(self, cr, uid, context=None): + avatar_path = openerp.modules.get_module_resource('base','images','photo.png') + return open(avatar_path, 'rb').read().encode('base64') _defaults = { 'password' : '', 'context_lang': 'en_US', - 'photo': _get_photo, + 'avatar': _get_avatar, 'active' : True, 'menu_id': _get_menu, 'company_id': _get_company, From 6c4ccf9bd5cd87ace847ba95c65bb963493d3300 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 13 Mar 2012 09:57:43 +0100 Subject: [PATCH 13/30] [DOC] Added merge proposal documentation bzr revid: tde@openerp.com-20120313085743-oa9jrbvnqwklpnlb --- doc/api/user_img_specs.rst | 9 +++++++++ doc/index.rst.inc | 8 ++++++++ 2 files changed, 17 insertions(+) create mode 100644 doc/api/user_img_specs.rst diff --git a/doc/api/user_img_specs.rst b/doc/api/user_img_specs.rst new file mode 100644 index 00000000000..db15201ba0a --- /dev/null +++ b/doc/api/user_img_specs.rst @@ -0,0 +1,9 @@ +User avatar +=========== + +This revision adds an avatar for users. This replace the use of gravatar to emulate avatars, such as used in tasks kanban view. Two fields are added to res.users model: +- avatar, binary image +- avatar_mini, an automatically computed reduced version of the avatar +User avatar has to be used everywhere an image depicting users is likely to be used, by using the avatar_mini field. + +Avatar choice has been added to the users form view, as well as in Preferences. diff --git a/doc/index.rst.inc b/doc/index.rst.inc index 05c4a53640b..d208bf82eb1 100644 --- a/doc/index.rst.inc +++ b/doc/index.rst.inc @@ -6,3 +6,11 @@ OpenERP Server :maxdepth: 1 test-framework + +New feature merges +++++++++++++++++++ + +.. toctree:: + :maxdepth: 1 + + api/user_img_specs From 0790cbbfd781cc61cfd89d89ba20bd4328bcefbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 13 Mar 2012 10:16:51 +0100 Subject: [PATCH 14/30] [IMP] res.users: code cleaning bzr revid: tde@openerp.com-20120313091651-6jvvuljjrlpjsto6 --- openerp/addons/base/res/res_users.py | 37 ++++++++++++++-------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 7936ec2f5c9..25d7ce9d9f9 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -203,25 +203,6 @@ class users(osv.osv): self.write(cr, uid, ids, {'groups_id': [(4, extended_group_id)]}, context=context) return True - def _get_avatar_mini(self, cr, uid, ids, name, args, context=None): - result = {} - for obj in self.browse(cr, uid, ids, context=context): - if not obj.avatar: - result[obj.id] = False - continue - - image_stream = io.BytesIO(obj.avatar.decode('base64')) - img = Image.open(image_stream) - img.thumbnail((180, 150), Image.ANTIALIAS) - img_stream = StringIO.StringIO() - img.save(img_stream, "JPEG") - result[obj.id] = img_stream.getvalue().encode('base64') - return result - - def _set_avatar_mini(self, cr, uid, id, name, value, args, context=None): - self.write(cr, uid, [id], {'avatar': value}, context=context) - return True - def _get_interface_type(self, cr, uid, ids, name, args, context=None): """Implementation of 'view' function field getter, returns the type of interface of the users. @param field_name: Name of the field @@ -233,6 +214,24 @@ class users(osv.osv): extended_users = group_obj.read(cr, uid, extended_group_id, ['users'], context=context)['users'] return dict(zip(ids, ['extended' if user in extended_users else 'simple' for user in ids])) + def _set_avatar_mini(self, cr, uid, id, name, value, args, context=None): + return self.write(cr, uid, [id], {'avatar': value}, context=context) + + def _get_avatar_mini(self, cr, uid, ids, name, args, context=None): + result = {} + for user in self.browse(cr, uid, ids, context=context): + if not user.avatar: + result[user.id] = False + continue + + image_stream = io.BytesIO(user.avatar.decode('base64')) + img = Image.open(image_stream) + img.thumbnail((180, 150), Image.ANTIALIAS) + img_stream = StringIO.StringIO() + img.save(img_stream, "JPEG") + result[user.id] = img_stream.getvalue().encode('base64') + return result + def _set_new_password(self, cr, uid, id, name, value, args, context=None): if value is False: # Do not update the password if no value is provided, ignore silently. From 9f2a5f2d039ace4c02f018888b35fdb6ead0e030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 13 Mar 2012 11:29:16 +0100 Subject: [PATCH 15/30] [IMP] Improved default avatar (now takes randomly between 6 avatars); cleaned code about avatar and avatar_mini management; fixed bug when creating a new user where the chosen avatar was not saved bzr revid: tde@openerp.com-20120313102916-w5rdtwco72xe8m7n --- openerp/addons/base/base_update.xml | 2 +- openerp/addons/base/images/photo.png | Bin 2685 -> 0 bytes openerp/addons/base/res/res_users.py | 34 +++++++++++++++++---------- 3 files changed, 23 insertions(+), 13 deletions(-) delete mode 100644 openerp/addons/base/images/photo.png diff --git a/openerp/addons/base/base_update.xml b/openerp/addons/base/base_update.xml index 0eef0a0f4cb..5d6f214c0a9 100644 --- a/openerp/addons/base/base_update.xml +++ b/openerp/addons/base/base_update.xml @@ -130,7 +130,7 @@ - + diff --git a/openerp/addons/base/images/photo.png b/openerp/addons/base/images/photo.png deleted file mode 100644 index 1d124127b2bf7115fdb38ab2fc136fdf5b531237..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2685 zcmV-@3WD{CP)@cEZEfxEk3asno3<^Q<_tXZ%rjptisIYOxmYO`k|dEhj$y6UT5BSrwW26~{@7!W z4W?ytDg>T*;)!H-cJ@bQSsn&Z0w~fnt+Ff&aU4?|$JSb#0!W>6rYy_fJo@OPzn|DJ z05uIIb8~Y)b0#_|B70 zJ{e7Ff1*YF^wUrGwAPOR820=9t-)Y$WoBk(n}`Y#aUle8&Y`L*4WQCm2j?7#h#{i6 zg9i`(1i;TeH3G(%FL>|6)vH$rhYugVHZwERUt3!nZES2*Q55mw;-Xk<5kd&gIUbEh z6hg2egbYBZEX#wF*q@kywf6Iyo15;ThaM^x78XX<+T#BE?{`Y6aQ^&xxp3hEhQlH5 zzWeTwBngZ$l~QW7y}douS{EUNxu>3b%1#nqC(Q!~XJ=>q+}vEPl&Y0dL2Dhf)^hy# zaXESNWIK)ku!wkOt_Oob{pzc)*2Wl)qUb&VZ{I0^i54+4ck?`FrIaV4pp*(qDG(8e z2qMz_^dyj~AjVOioUL(A3-#+%< zW70e{5dmXNIXgSs0^4&;`~4Up0l;w_OQ+L86h&7i!Ena}UU}t}Kp!}8z+-|13`{_v z)9L)9uIsMWS_6ng#E6J)35)@6!IOw+5wXqq$a|j<(d(ZIffFZAlp%z-8@EXTq(l?} z(DYFocdPczCjc@LNvf*ijg5^rKNSK15JLFva5&r+kz7PNA%ujPt%xXQMkCaSX68sl zvJgVf%rP@Refsoi{?rJZI(6zT0KX0)WX#+RA#_3rQ3JLG4rW%&Y?wJ=<~)Rud+$G3 zUS9s^B=#pJ001XXp1k0_-)81cLm&+yjL!lwvkDYTG71kKD8LZGH^LkNj;E-lM43L*SyDz>Mgq^hbv)OBr`Icwf>q6dp?Y)Qho*FVHgb;0SZ`*#q z|F>z_1*Sv*0HP>*>(Zr5)_ZT8J-=$+JT)_+opa{>_un^JmQ9qr#@p1&Dp{6Y9F0bb znGFEN%!-;M&|LM(%8FiCSfIgR@XoaCPK^LF*M|-rqLq~uSZmed;v(AJW>r;KSy{pS z{52$uKwXTS$ zBqB#dfrz+~KtxVNN+K$=Ec^bn>`qLeD2n;@_4V)Od9DCl6Okb^S0WOaSpZ1WF98hF zH0{sL&CM1?@x7|5mL|1-$1b$Bwe`iSs=jWmJ=E*AzTX~Y#U>Clu`pCD$25SWm$?+3Q-hMk|b6{5^HTINs<`=Ga}LjkO4@Td8Cwj z%{lkGJkPhLN?>bi>;BPb^i8ex=h8G~A}WkABM}*Dtp`LjAfgd7kF?fRUDsYjxX~>{ zL|SX5wKmO}Aq9{(;5*HBJQI-=fFYs_BJxs_ByUYjV0Cr%2LQg(>2ykK?NDnyP)ZGn zXb51Wlq!g*1W*I;L=^CmD~u~Ae021*jl?3-9&mC1xrlT`q(elBi2OB8(_i5hu60WS ztE;O&^xmK7^?HLONp=A25Ya$uJ=9v4L{y82BO)&%Ohnv({y3%W@k}>FGGm;6>ynAHTy2+xSDF`7F!~?7CMfBDweeV87q*b-UebH!9dOk(FinwJ3_n7&8Je z5|M(L9T9nMwBy#Ua;HRCDb>1FAtJ-ZK5MNX-0Q)c2&}BESZ01$Ywd}s5|IkK)5;nY$%*;k96|b+aKYSyB>lX3LFTYG#mL0t7uDf&; zMTz&mCnBDRED;sn`7dIFTU6bA^iB>d+$9uKR;htYe(Muk%*L9>$=zL)m2sbvMgPm z=i~8woWx$qjBbz?cq^8fO0r0PuI63008IC zom1ZXdqm_b_uY5jgG)JyIk0%8R2U2f-WcOs0z|}(ueSN&#t=JRy;e#oYKpYoAp<(+rlSwC~;%uQR0TW%%Jo;|CUmzQ-}mWx$YJ+QR2 zbR^5N12Z!-y>7Q_j4|zgpPR_hZl47Jm|2bu)lO}0f{*M4VbXJ;@NTwGgQ z`&X~mdvpK({a0Uj;RV?X_-zr`Yi0oGG);A<)1k|kFVA}K=S3tn#>CFKn3 avatar6, choose randomly + random.seed() + avatar_path = openerp.modules.get_module_resource('base', 'images', 'avatar%d.jpg' % random.randint(0, 6)) + return self._avatar_resize(cr, uid, open(avatar_path, 'rb').read().encode('base64')) + _defaults = { 'password' : '', 'context_lang': 'en_US', - 'avatar': _get_avatar, + 'avatar_mini': _get_avatar, 'active' : True, 'menu_id': _get_menu, 'company_id': _get_company, From 14b71b0aeb3e19fb4af63139e63acd4740d8b2fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 13 Mar 2012 11:31:46 +0100 Subject: [PATCH 16/30] [ADD] Added files for new default avatars. bzr revid: tde@openerp.com-20120313103146-6b6yloob7pkxrscq --- openerp/addons/base/images/avatar0.jpg | Bin 0 -> 9916 bytes openerp/addons/base/images/avatar1.jpg | Bin 0 -> 12294 bytes openerp/addons/base/images/avatar2.jpg | Bin 0 -> 12549 bytes openerp/addons/base/images/avatar3.jpg | Bin 0 -> 12161 bytes openerp/addons/base/images/avatar4.jpg | Bin 0 -> 11921 bytes openerp/addons/base/images/avatar5.jpg | Bin 0 -> 11789 bytes openerp/addons/base/images/avatar6.jpg | Bin 0 -> 8128 bytes 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 openerp/addons/base/images/avatar0.jpg create mode 100644 openerp/addons/base/images/avatar1.jpg create mode 100644 openerp/addons/base/images/avatar2.jpg create mode 100644 openerp/addons/base/images/avatar3.jpg create mode 100644 openerp/addons/base/images/avatar4.jpg create mode 100644 openerp/addons/base/images/avatar5.jpg create mode 100644 openerp/addons/base/images/avatar6.jpg diff --git a/openerp/addons/base/images/avatar0.jpg b/openerp/addons/base/images/avatar0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1078135d040e0b31959d17d02a77677030c09782 GIT binary patch literal 9916 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 IICB4g0PvdiKL7v# literal 0 HcmV?d00001 diff --git a/openerp/addons/base/images/avatar1.jpg b/openerp/addons/base/images/avatar1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4746731da71afa466e96ccfb0111936a59ee6f35 GIT binary patch literal 12294 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 R>f8B$bMF89EBI5Y{{g?``yBuP literal 0 HcmV?d00001 diff --git a/openerp/addons/base/images/avatar2.jpg b/openerp/addons/base/images/avatar2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58a84c3d499a7d7b750c5e76a040b57127fec05c GIT binary patch literal 12549 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 N;^+VQqs&6@{{S`JK=l9s literal 0 HcmV?d00001 diff --git a/openerp/addons/base/images/avatar5.jpg b/openerp/addons/base/images/avatar5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee341becb756a5394828e021ea2da5a9d31f687f GIT binary patch literal 11789 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 literal 0 HcmV?d00001 From 8454553a5b443beda165a30d8d9b1d96e5148d4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 13 Mar 2012 11:41:55 +0100 Subject: [PATCH 17/30] [DOC] Updated merge documentation. bzr revid: tde@openerp.com-20120313104155-221i8zfzfs03yenq --- doc/api/user_img_specs.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/api/user_img_specs.rst b/doc/api/user_img_specs.rst index db15201ba0a..d2bce64f142 100644 --- a/doc/api/user_img_specs.rst +++ b/doc/api/user_img_specs.rst @@ -1,9 +1,9 @@ User avatar =========== -This revision adds an avatar for users. This replace the use of gravatar to emulate avatars, such as used in tasks kanban view. Two fields are added to res.users model: -- avatar, binary image -- avatar_mini, an automatically computed reduced version of the avatar +This revision adds an avatar for users. This replaces the use of gravatar to emulate avatars, used in views like the tasks kanban view. Two fields have been added to the res.users model: + - avatar, a binary field holding the image + - avatar_mini, a binary field holding an automatically resized version of the avatar. Dimensions of the resized avatar are 180x150. User avatar has to be used everywhere an image depicting users is likely to be used, by using the avatar_mini field. -Avatar choice has been added to the users form view, as well as in Preferences. +An avatar field has been added to the users form view, as well as in Preferences. When creating a new user, a default avatar is chosen among 6 possible default images. From 4c41a2994addcc1706f7e9e613b18ddb7bb96743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 13 Mar 2012 12:14:18 +0100 Subject: [PATCH 18/30] [IMP] Avatar mini field gets automatically recomputed to avoid screwing the display when choosing a new one. bzr revid: tde@openerp.com-20120313111418-fsrtwhcp0eesg0aq --- openerp/addons/base/res/res_users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index f5fba485b02..c98c3ab8f5a 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -218,7 +218,7 @@ class users(osv.osv): return dict(zip(ids, ['extended' if user in extended_users else 'simple' for user in ids])) def onchange_avatar_mini(self, cr, uid, ids, value, context=None): - return {'value': {'avatar': value } } + return {'value': {'avatar': value, 'avatar_mini': self._avatar_resize(cr, uid, value) } } def _set_avatar_mini(self, cr, uid, id, name, value, args, context=None): return self.write(cr, uid, [id], {'avatar': value}, context=context) From d48b3bdb6b5370af71efe1cc2557eaea68282581 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 23 Mar 2012 10:08:21 +0100 Subject: [PATCH 19/30] [IMP] Improved code: renamed avatar->avatar_stored (stored in database); avatar_mini->avatar (interface field taht must be used); removed unnecessary comments; added help string on added fields to help understanding how the functionality works. bzr revid: tde@openerp.com-20120323090821-rse7y3i1qpp8tbky --- openerp/addons/base/base_update.xml | 4 ++-- openerp/addons/base/res/res_users.py | 27 ++++++++++++--------------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/openerp/addons/base/base_update.xml b/openerp/addons/base/base_update.xml index 5d6f214c0a9..85d92106fc8 100644 --- a/openerp/addons/base/base_update.xml +++ b/openerp/addons/base/base_update.xml @@ -94,7 +94,7 @@ - + @@ -130,7 +130,7 @@ - + diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index c98c3ab8f5a..55e251b9af0 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -35,10 +35,8 @@ from tools.translate import _ import openerp import openerp.exceptions -# for avatar resizing import io, StringIO from PIL import Image -# for default avatar choice import random _logger = logging.getLogger(__name__) @@ -217,11 +215,11 @@ class users(osv.osv): extended_users = group_obj.read(cr, uid, extended_group_id, ['users'], context=context)['users'] return dict(zip(ids, ['extended' if user in extended_users else 'simple' for user in ids])) - def onchange_avatar_mini(self, cr, uid, ids, value, context=None): - return {'value': {'avatar': value, 'avatar_mini': self._avatar_resize(cr, uid, value) } } + def onchange_avatar(self, cr, uid, ids, value, context=None): + return {'value': {'avatar_stored': value, 'avatar': self._avatar_resize(cr, uid, value, context=context) } } - def _set_avatar_mini(self, cr, uid, id, name, value, args, context=None): - return self.write(cr, uid, [id], {'avatar': value}, context=context) + def _set_avatar(self, cr, uid, id, name, value, args, context=None): + return self.write(cr, uid, [id], {'avatar_stored': value}, context=context) def _avatar_resize(self, cr, uid, avatar, context=None): image_stream = io.BytesIO(avatar.decode('base64')) @@ -231,13 +229,13 @@ class users(osv.osv): img.save(img_stream, "JPEG") return img_stream.getvalue().encode('base64') - def _get_avatar_mini(self, cr, uid, ids, name, args, context=None): + def _get_avatar(self, cr, uid, ids, name, args, context=None): result = {} for user in self.browse(cr, uid, ids, context=context): if not user.avatar: result[user.id] = False else: - result[user.id] = self._avatar_resize(cr, uid, user.avatar) + result[user.id] = self._avatar_resize(cr, uid, user.avatar_stored) return result def _set_new_password(self, cr, uid, id, name, value, args, context=None): @@ -269,11 +267,11 @@ class users(osv.osv): "otherwise leave empty. After a change of password, the user has to login again."), 'user_email': fields.char('Email', size=64), 'signature': fields.text('Signature', size=64), - 'avatar': fields.binary('User Avatar'), - 'avatar_mini': fields.function(_get_avatar_mini, fnct_inv=_set_avatar_mini, string='User Avatar Mini', type="binary", + 'avatar_stored': fields.binary('Stored avatar', help="This field holds the image used as avatar for the user. The avatar field is used as an interface to access this field. The image is base64 encoded, and PIL-supported."), + 'avatar': fields.function(_get_avatar, fnct_inv=_set_avatar, string='Avatar', type="binary", store = { - 'res.users': (lambda self, cr, uid, ids, c={}: ids, ['avatar'], 10), - }), + 'res.users': (lambda self, cr, uid, ids, c={}: ids, ['avatar_stored'], 10), + }, help="Image used as avatar for the user. It is automatically resized as a 180x150 px image."), 'active': fields.boolean('Active'), 'action_id': fields.many2one('ir.actions.actions', 'Home Action', help="If specified, this action will be opened at logon for this user, in addition to the standard menu."), 'menu_id': fields.many2one('ir.actions.actions', 'Menu Action', help="If specified, the action will replace the standard menu for this user."), @@ -386,15 +384,14 @@ class users(osv.osv): return result def _get_avatar(self, cr, uid, context=None): - # default avatar file name: avatar0 -> avatar6, choose randomly - random.seed() + # default avatar file name: avatar0 -> avatar6.jpg, choose randomly avatar_path = openerp.modules.get_module_resource('base', 'images', 'avatar%d.jpg' % random.randint(0, 6)) return self._avatar_resize(cr, uid, open(avatar_path, 'rb').read().encode('base64')) _defaults = { 'password' : '', 'context_lang': 'en_US', - 'avatar_mini': _get_avatar, + 'avatar': _get_avatar, 'active' : True, 'menu_id': _get_menu, 'company_id': _get_company, From d7be1e92d03f26241a1084c4faaccce66fc9aa89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 23 Mar 2012 10:15:08 +0100 Subject: [PATCH 20/30] [DOC] Updated doc to match last revision. bzr revid: tde@openerp.com-20120323091508-2m01y3hj9vw49ofk --- doc/api/user_img_specs.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/api/user_img_specs.rst b/doc/api/user_img_specs.rst index d2bce64f142..ea1d39c26a8 100644 --- a/doc/api/user_img_specs.rst +++ b/doc/api/user_img_specs.rst @@ -2,8 +2,8 @@ User avatar =========== This revision adds an avatar for users. This replaces the use of gravatar to emulate avatars, used in views like the tasks kanban view. Two fields have been added to the res.users model: - - avatar, a binary field holding the image - - avatar_mini, a binary field holding an automatically resized version of the avatar. Dimensions of the resized avatar are 180x150. -User avatar has to be used everywhere an image depicting users is likely to be used, by using the avatar_mini field. + - avatar_stored, a binary field holding the image. It is base-64 encoded, and PIL-supported. + - avatar, a function binary field holding an automatically resized version of the avatar. Dimensions of the resized avatar are 180x150. This field is used as an inteface to get and set the user avatar. When changing this field in a view, the new image is automatically resized, and stored in the avatar_stored field. Note that the value is stored on another field, because otherwise it would imply to write on the function field, which currently using OpenERP 6.1 can lead to issues. +User avatar has to be used everywhere an image depicting users is likely to be used, by using the avatar field. An avatar field has been added to the users form view, as well as in Preferences. When creating a new user, a default avatar is chosen among 6 possible default images. From 6e0643868e8f245fd923d5d010901a2cefe0553a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 23 Mar 2012 10:17:47 +0100 Subject: [PATCH 21/30] [FIX] Forgot to update a field name. bzr revid: tde@openerp.com-20120323091747-i2dhjhy5witysd7s --- openerp/addons/base/res/res_users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 55e251b9af0..1c3dda89878 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -222,7 +222,7 @@ class users(osv.osv): return self.write(cr, uid, [id], {'avatar_stored': value}, context=context) def _avatar_resize(self, cr, uid, avatar, context=None): - image_stream = io.BytesIO(avatar.decode('base64')) + image_stream = io.BytesIO(avatar_stored.decode('base64')) img = Image.open(image_stream) img.thumbnail((180, 150), Image.ANTIALIAS) img_stream = StringIO.StringIO() From 0e95e0cf92bef425511eb26d7dbbc1d5488a2dd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 23 Mar 2012 11:05:13 +0100 Subject: [PATCH 22/30] [FIX] Fixed the last fix. Also cleaned a bit the code. bzr revid: tde@openerp.com-20120323100513-m2n5n3jtxz8zo1yl --- openerp/addons/base/res/res_users.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 6f28881b412..3827e5ef8c5 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -219,13 +219,13 @@ class users(osv.osv): return dict(zip(ids, ['extended' if user in extended_users else 'simple' for user in ids])) def onchange_avatar(self, cr, uid, ids, value, context=None): - return {'value': {'avatar_stored': value, 'avatar': self._avatar_resize(cr, uid, value, context=context) } } + return {'value': {'avatar_stored': self._avatar_resize(cr, uid, value, context=context), 'avatar': self._avatar_resize(cr, uid, value, context=context) } } def _set_avatar(self, cr, uid, id, name, value, args, context=None): return self.write(cr, uid, [id], {'avatar_stored': value}, context=context) def _avatar_resize(self, cr, uid, avatar, context=None): - image_stream = io.BytesIO(avatar_stored.decode('base64')) + image_stream = io.BytesIO(avatar.decode('base64')) img = Image.open(image_stream) img.thumbnail((180, 150), Image.ANTIALIAS) img_stream = StringIO.StringIO() @@ -233,11 +233,9 @@ class users(osv.osv): return img_stream.getvalue().encode('base64') def _get_avatar(self, cr, uid, ids, name, args, context=None): - result = {} + result = dict.fromkeys(ids, False) for user in self.browse(cr, uid, ids, context=context): - if not user.avatar: - result[user.id] = False - else: + if user.avatar_stored: result[user.id] = self._avatar_resize(cr, uid, user.avatar_stored) return result From cab93f96739a782b2775923921b1bf85c3f877ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 23 Mar 2012 11:14:14 +0100 Subject: [PATCH 23/30] [IMP] Added height and width parameters to the resize method. Propagated context. bzr revid: tde@openerp.com-20120323101414-28xbjkfhk03f5whe --- openerp/addons/base/res/res_users.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 3827e5ef8c5..e8e0e68b8d9 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -219,15 +219,15 @@ class users(osv.osv): return dict(zip(ids, ['extended' if user in extended_users else 'simple' for user in ids])) def onchange_avatar(self, cr, uid, ids, value, context=None): - return {'value': {'avatar_stored': self._avatar_resize(cr, uid, value, context=context), 'avatar': self._avatar_resize(cr, uid, value, context=context) } } + return {'value': {'avatar_stored': self._avatar_resize(cr, uid, value, 360, 300, context=context), 'avatar': self._avatar_resize(cr, uid, value, context=context) } } def _set_avatar(self, cr, uid, id, name, value, args, context=None): return self.write(cr, uid, [id], {'avatar_stored': value}, context=context) - def _avatar_resize(self, cr, uid, avatar, context=None): + def _avatar_resize(self, cr, uid, avatar, height=180, width=150, context=None): image_stream = io.BytesIO(avatar.decode('base64')) img = Image.open(image_stream) - img.thumbnail((180, 150), Image.ANTIALIAS) + img.thumbnail((height, width), Image.ANTIALIAS) img_stream = StringIO.StringIO() img.save(img_stream, "JPEG") return img_stream.getvalue().encode('base64') @@ -236,7 +236,7 @@ class users(osv.osv): result = dict.fromkeys(ids, False) for user in self.browse(cr, uid, ids, context=context): if user.avatar_stored: - result[user.id] = self._avatar_resize(cr, uid, user.avatar_stored) + result[user.id] = self._avatar_resize(cr, uid, user.avatar_stored, context=context) return result def _set_new_password(self, cr, uid, id, name, value, args, context=None): @@ -387,7 +387,7 @@ class users(osv.osv): def _get_avatar(self, cr, uid, context=None): # default avatar file name: avatar0 -> avatar6.jpg, choose randomly avatar_path = openerp.modules.get_module_resource('base', 'images', 'avatar%d.jpg' % random.randint(0, 6)) - return self._avatar_resize(cr, uid, open(avatar_path, 'rb').read().encode('base64')) + return self._avatar_resize(cr, uid, open(avatar_path, 'rb').read().encode('base64'), context=context) _defaults = { 'password' : '', From d67e232806183343d743266782894f4d865af17e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 23 Mar 2012 11:32:30 +0100 Subject: [PATCH 24/30] [IMP] Improved comments and doc. Note that now avatar_stored stores a bigger version of the avatar, in case a bigger image must be used. bzr revid: tde@openerp.com-20120323103230-lcpbl1e9qhidivz7 --- doc/api/user_img_specs.rst | 4 ++-- openerp/addons/base/res/res_users.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/api/user_img_specs.rst b/doc/api/user_img_specs.rst index ea1d39c26a8..5a5b84422e0 100644 --- a/doc/api/user_img_specs.rst +++ b/doc/api/user_img_specs.rst @@ -2,8 +2,8 @@ User avatar =========== This revision adds an avatar for users. This replaces the use of gravatar to emulate avatars, used in views like the tasks kanban view. Two fields have been added to the res.users model: - - avatar_stored, a binary field holding the image. It is base-64 encoded, and PIL-supported. - - avatar, a function binary field holding an automatically resized version of the avatar. Dimensions of the resized avatar are 180x150. This field is used as an inteface to get and set the user avatar. When changing this field in a view, the new image is automatically resized, and stored in the avatar_stored field. Note that the value is stored on another field, because otherwise it would imply to write on the function field, which currently using OpenERP 6.1 can lead to issues. + - avatar_stored, a binary field holding the image. It is base-64 encoded, and PIL-supported. Images stored are resized to 540x450 px, to limitate the binary field size. + - avatar, a function binary field holding an automatically resized version of the avatar_stored field. Dimensions of the resized avatar are 180x150. This field is used as an inteface to get and set the user avatar. When changing this field in a view, the new image is automatically resized, and stored in the avatar_stored field. Note that the value is stored on another field, because otherwise it would imply to write on the function field, which currently using OpenERP 6.1 can lead to issues. User avatar has to be used everywhere an image depicting users is likely to be used, by using the avatar field. An avatar field has been added to the users form view, as well as in Preferences. When creating a new user, a default avatar is chosen among 6 possible default images. diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index e8e0e68b8d9..d08aca91bb1 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -219,10 +219,10 @@ class users(osv.osv): return dict(zip(ids, ['extended' if user in extended_users else 'simple' for user in ids])) def onchange_avatar(self, cr, uid, ids, value, context=None): - return {'value': {'avatar_stored': self._avatar_resize(cr, uid, value, 360, 300, context=context), 'avatar': self._avatar_resize(cr, uid, value, context=context) } } + return {'value': {'avatar_stored': self._avatar_resize(cr, uid, value, 540, 450, context=context), 'avatar': self._avatar_resize(cr, uid, value, context=context) } } def _set_avatar(self, cr, uid, id, name, value, args, context=None): - return self.write(cr, uid, [id], {'avatar_stored': value}, context=context) + return self.write(cr, uid, [id], {'avatar_stored': self._avatar_resize(cr, uid, value, 540, 450, context=context)}, context=context) def _avatar_resize(self, cr, uid, avatar, height=180, width=150, context=None): image_stream = io.BytesIO(avatar.decode('base64')) @@ -268,11 +268,11 @@ class users(osv.osv): "otherwise leave empty. After a change of password, the user has to login again."), 'user_email': fields.char('Email', size=64), 'signature': fields.text('Signature', size=64), - 'avatar_stored': fields.binary('Stored avatar', help="This field holds the image used as avatar for the user. The avatar field is used as an interface to access this field. The image is base64 encoded, and PIL-supported."), + 'avatar_stored': fields.binary('Stored avatar', help="This field holds the image used as avatar for the user. The avatar field is used as an interface to access this field. The image is base64 encoded, and PIL-supported. It is stored as a 540x450 px image, incase a bigger image must be used."), 'avatar': fields.function(_get_avatar, fnct_inv=_set_avatar, string='Avatar', type="binary", store = { 'res.users': (lambda self, cr, uid, ids, c={}: ids, ['avatar_stored'], 10), - }, help="Image used as avatar for the user. It is automatically resized as a 180x150 px image."), + }, help="Image used as avatar for the user. It is automatically resized as a 180x150 px image. This field serves as an interface to the avatar_stored field."), 'active': fields.boolean('Active'), 'action_id': fields.many2one('ir.actions.actions', 'Home Action', help="If specified, this action will be opened at logon for this user, in addition to the standard menu."), 'menu_id': fields.many2one('ir.actions.actions', 'Menu Action', help="If specified, the action will replace the standard menu for this user."), From 10eba844ba69769ef5efafa13f00862c82e4d743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 23 Mar 2012 12:05:21 +0100 Subject: [PATCH 25/30] [IMP] Reordered imports (alaphabetical order); avatar_stored->avatar_big, clearer field name bzr revid: tde@openerp.com-20120323110521-rna7hh5alr0as04c --- openerp/addons/base/res/res_users.py | 37 ++++++++++++++-------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index d08aca91bb1..5c52497219a 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -25,22 +25,21 @@ from functools import partial import pytz -import netsvc -import pooler -import tools -from osv import fields,osv -from osv.orm import browse_record -from service import security -from tools.translate import _ -import openerp -import openerp.exceptions +import io, StringIO from lxml import etree from lxml.builder import E - - -import io, StringIO +import netsvc +import openerp +import openerp.exceptions +from osv import fields,osv +from osv.orm import browse_record from PIL import Image +import pooler import random +from service import security +import tools +from tools.translate import _ + _logger = logging.getLogger(__name__) @@ -219,10 +218,10 @@ class users(osv.osv): return dict(zip(ids, ['extended' if user in extended_users else 'simple' for user in ids])) def onchange_avatar(self, cr, uid, ids, value, context=None): - return {'value': {'avatar_stored': self._avatar_resize(cr, uid, value, 540, 450, context=context), 'avatar': self._avatar_resize(cr, uid, value, context=context) } } + return {'value': {'avatar_big': self._avatar_resize(cr, uid, value, 540, 450, context=context), 'avatar': self._avatar_resize(cr, uid, value, context=context) } } def _set_avatar(self, cr, uid, id, name, value, args, context=None): - return self.write(cr, uid, [id], {'avatar_stored': self._avatar_resize(cr, uid, value, 540, 450, context=context)}, context=context) + return self.write(cr, uid, [id], {'avatar_big': self._avatar_resize(cr, uid, value, 540, 450, context=context)}, context=context) def _avatar_resize(self, cr, uid, avatar, height=180, width=150, context=None): image_stream = io.BytesIO(avatar.decode('base64')) @@ -235,8 +234,8 @@ class users(osv.osv): def _get_avatar(self, cr, uid, ids, name, args, context=None): result = dict.fromkeys(ids, False) for user in self.browse(cr, uid, ids, context=context): - if user.avatar_stored: - result[user.id] = self._avatar_resize(cr, uid, user.avatar_stored, context=context) + if user.avatar_big: + result[user.id] = self._avatar_resize(cr, uid, user.avatar_big, context=context) return result def _set_new_password(self, cr, uid, id, name, value, args, context=None): @@ -268,11 +267,11 @@ class users(osv.osv): "otherwise leave empty. After a change of password, the user has to login again."), 'user_email': fields.char('Email', size=64), 'signature': fields.text('Signature', size=64), - 'avatar_stored': fields.binary('Stored avatar', help="This field holds the image used as avatar for the user. The avatar field is used as an interface to access this field. The image is base64 encoded, and PIL-supported. It is stored as a 540x450 px image, incase a bigger image must be used."), + 'avatar_big': fields.binary('Big-sized avatar', help="This field holds the image used as avatar for the user. The avatar field is used as an interface to access this field. The image is base64 encoded, and PIL-supported. It is stored as a 540x450 px image, in case a bigger image must be used."), 'avatar': fields.function(_get_avatar, fnct_inv=_set_avatar, string='Avatar', type="binary", store = { - 'res.users': (lambda self, cr, uid, ids, c={}: ids, ['avatar_stored'], 10), - }, help="Image used as avatar for the user. It is automatically resized as a 180x150 px image. This field serves as an interface to the avatar_stored field."), + 'res.users': (lambda self, cr, uid, ids, c={}: ids, ['avatar_big'], 10), + }, help="Image used as avatar for the user. It is automatically resized as a 180x150 px image. This field serves as an interface to the avatar_big field."), 'active': fields.boolean('Active'), 'action_id': fields.many2one('ir.actions.actions', 'Home Action', help="If specified, this action will be opened at logon for this user, in addition to the standard menu."), 'menu_id': fields.many2one('ir.actions.actions', 'Menu Action', help="If specified, the action will replace the standard menu for this user."), From 4a2b5a72e5889fc0511414f2f9760facc3348d13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 23 Mar 2012 12:10:29 +0100 Subject: [PATCH 26/30] [DOC] Updated doc. bzr revid: tde@openerp.com-20120323111029-6h8je23ywv61123s --- doc/api/user_img_specs.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/api/user_img_specs.rst b/doc/api/user_img_specs.rst index 5a5b84422e0..4ee97999aca 100644 --- a/doc/api/user_img_specs.rst +++ b/doc/api/user_img_specs.rst @@ -2,8 +2,8 @@ User avatar =========== This revision adds an avatar for users. This replaces the use of gravatar to emulate avatars, used in views like the tasks kanban view. Two fields have been added to the res.users model: - - avatar_stored, a binary field holding the image. It is base-64 encoded, and PIL-supported. Images stored are resized to 540x450 px, to limitate the binary field size. - - avatar, a function binary field holding an automatically resized version of the avatar_stored field. Dimensions of the resized avatar are 180x150. This field is used as an inteface to get and set the user avatar. When changing this field in a view, the new image is automatically resized, and stored in the avatar_stored field. Note that the value is stored on another field, because otherwise it would imply to write on the function field, which currently using OpenERP 6.1 can lead to issues. -User avatar has to be used everywhere an image depicting users is likely to be used, by using the avatar field. + - avatar_big, a binary field holding the image. It is base-64 encoded, and PIL-supported. Images stored are resized to 540x450 px, to limitate the binary field size. + - avatar, a function binary field holding an automatically resized version of the avatar_big field. It is also base-64 encoded, and PIL-supported. Dimensions of the resized avatar are 180x150. This field is used as an inteface to get and set the user avatar. +When changing the avatar through the avatar function field, the new image is automatically resized to 540x450, and stored in the avatar_big field. This triggers the function field, that will compute a 180x150 resized version of the image. An avatar field has been added to the users form view, as well as in Preferences. When creating a new user, a default avatar is chosen among 6 possible default images. From 31e186687e443767fe2f2a11c3d31a412ad35ef1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 23 Mar 2012 14:32:46 +0100 Subject: [PATCH 27/30] [FIX] Fixed crash when clearing avatar in form view. However, clearing means a new default avatar will be chosen. bzr revid: tde@openerp.com-20120323133246-78z4fszbqcvir16h --- openerp/addons/base/res/res_users.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 5c52497219a..65e514fcb31 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -218,9 +218,13 @@ class users(osv.osv): return dict(zip(ids, ['extended' if user in extended_users else 'simple' for user in ids])) def onchange_avatar(self, cr, uid, ids, value, context=None): - return {'value': {'avatar_big': self._avatar_resize(cr, uid, value, 540, 450, context=context), 'avatar': self._avatar_resize(cr, uid, value, context=context) } } + if not value: + return {'value': {'avatar_big': value, 'avatar': value} } + return {'value': {'avatar_big': self._avatar_resize(cr, uid, value, 540, 450, context=context), 'avatar': self._avatar_resize(cr, uid, value, context=context)} } def _set_avatar(self, cr, uid, id, name, value, args, context=None): + if not value: + return {'value': {'avatar_big': value, 'avatar': value} } return self.write(cr, uid, [id], {'avatar_big': self._avatar_resize(cr, uid, value, 540, 450, context=context)}, context=context) def _avatar_resize(self, cr, uid, avatar, height=180, width=150, context=None): From 14609fa2edc5da5f455c9deae31cc9b412614cb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 23 Mar 2012 15:02:51 +0100 Subject: [PATCH 28/30] [FIX] Fix of the last fix. Should avoid fixing on Friday. bzr revid: tde@openerp.com-20120323140251-wki6runit0juqlwg --- openerp/addons/base/res/res_users.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 65e514fcb31..b8a4306b137 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -224,8 +224,10 @@ class users(osv.osv): def _set_avatar(self, cr, uid, id, name, value, args, context=None): if not value: - return {'value': {'avatar_big': value, 'avatar': value} } - return self.write(cr, uid, [id], {'avatar_big': self._avatar_resize(cr, uid, value, 540, 450, context=context)}, context=context) + vals = {'avatar_big': value} + else: + vals = {'avatar_big': self._avatar_resize(cr, uid, value, 540, 450, context=context)} + return self.write(cr, uid, [id], vals, context=context) def _avatar_resize(self, cr, uid, avatar, height=180, width=150, context=None): image_stream = io.BytesIO(avatar.decode('base64')) From 0204b5f1a90b484573874a1390315b44cd801248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 30 Mar 2012 10:10:16 +0200 Subject: [PATCH 29/30] [IMP]: added new default avatars in png, allowing to avoid compression defaults in resized avatars bzr revid: tde@openerp.com-20120330081016-d6j2yd7ii86nhqzk --- openerp/addons/base/images/avatar0.jpg | Bin 9916 -> 0 bytes openerp/addons/base/images/avatar1.jpg | Bin 12294 -> 0 bytes openerp/addons/base/images/avatar2.jpg | Bin 12549 -> 0 bytes openerp/addons/base/images/avatar3.jpg | Bin 12161 -> 0 bytes openerp/addons/base/images/avatar4.jpg | Bin 11921 -> 0 bytes openerp/addons/base/images/avatar5.jpg | Bin 11789 -> 0 bytes openerp/addons/base/images/avatar6.jpg | Bin 8128 -> 0 bytes openerp/addons/base/res/res_users.py | 4 ++-- openerp/addons/base/static/src/img/avatar0.png | Bin 0 -> 6910 bytes openerp/addons/base/static/src/img/avatar1.png | Bin 0 -> 5279 bytes openerp/addons/base/static/src/img/avatar2.png | Bin 0 -> 5340 bytes openerp/addons/base/static/src/img/avatar3.png | Bin 0 -> 5317 bytes openerp/addons/base/static/src/img/avatar4.png | Bin 0 -> 5323 bytes openerp/addons/base/static/src/img/avatar5.png | Bin 0 -> 5374 bytes openerp/addons/base/static/src/img/avatar6.png | Bin 0 -> 5452 bytes 15 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 openerp/addons/base/images/avatar0.jpg delete mode 100644 openerp/addons/base/images/avatar1.jpg delete mode 100644 openerp/addons/base/images/avatar2.jpg delete mode 100644 openerp/addons/base/images/avatar3.jpg delete mode 100644 openerp/addons/base/images/avatar4.jpg delete mode 100644 openerp/addons/base/images/avatar5.jpg delete mode 100644 openerp/addons/base/images/avatar6.jpg create mode 100644 openerp/addons/base/static/src/img/avatar0.png create mode 100644 openerp/addons/base/static/src/img/avatar1.png create mode 100644 openerp/addons/base/static/src/img/avatar2.png create mode 100644 openerp/addons/base/static/src/img/avatar3.png create mode 100644 openerp/addons/base/static/src/img/avatar4.png create mode 100644 openerp/addons/base/static/src/img/avatar5.png create mode 100644 openerp/addons/base/static/src/img/avatar6.png diff --git a/openerp/addons/base/images/avatar0.jpg b/openerp/addons/base/images/avatar0.jpg deleted file mode 100644 index 1078135d040e0b31959d17d02a77677030c09782..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9916 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 IICB4g0PvdiKL7v# diff --git a/openerp/addons/base/images/avatar1.jpg b/openerp/addons/base/images/avatar1.jpg deleted file mode 100644 index 4746731da71afa466e96ccfb0111936a59ee6f35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12294 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 R>f8B$bMF89EBI5Y{{g?``yBuP diff --git a/openerp/addons/base/images/avatar2.jpg b/openerp/addons/base/images/avatar2.jpg deleted file mode 100644 index 58a84c3d499a7d7b750c5e76a040b57127fec05c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12549 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 N;^+VQqs&6@{{S`JK=l9s diff --git a/openerp/addons/base/images/avatar5.jpg b/openerp/addons/base/images/avatar5.jpg deleted file mode 100644 index ee341becb756a5394828e021ea2da5a9d31f687f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11789 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 diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index b8a4306b137..fbd4848439a 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -234,7 +234,7 @@ class users(osv.osv): img = Image.open(image_stream) img.thumbnail((height, width), Image.ANTIALIAS) img_stream = StringIO.StringIO() - img.save(img_stream, "JPEG") + img.save(img_stream, "PNG") return img_stream.getvalue().encode('base64') def _get_avatar(self, cr, uid, ids, name, args, context=None): @@ -391,7 +391,7 @@ class users(osv.osv): def _get_avatar(self, cr, uid, context=None): # default avatar file name: avatar0 -> avatar6.jpg, choose randomly - avatar_path = openerp.modules.get_module_resource('base', 'images', 'avatar%d.jpg' % random.randint(0, 6)) + avatar_path = openerp.modules.get_module_resource('base', 'static/src/img', 'avatar%d.png' % random.randint(0, 6)) return self._avatar_resize(cr, uid, open(avatar_path, 'rb').read().encode('base64'), context=context) _defaults = { diff --git a/openerp/addons/base/static/src/img/avatar0.png b/openerp/addons/base/static/src/img/avatar0.png new file mode 100644 index 0000000000000000000000000000000000000000..2bcc7c8d2e477a359296fbb8461c6cdb091dfdaf GIT binary patch literal 6910 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 xwXyaIe;sqAYZA7q`7>>~yf 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 TT)_e7i6DI)W9l>Ge<|B25LPNPs9DdI%!D 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 literal 0 HcmV?d00001 diff --git a/openerp/addons/base/static/src/img/avatar4.png b/openerp/addons/base/static/src/img/avatar4.png new file mode 100644 index 0000000000000000000000000000000000000000..1b2a99f05c314245013d41b663059fc87e126684 GIT binary patch literal 5323 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 EKfVga!vFvP literal 0 HcmV?d00001 diff --git a/openerp/addons/base/static/src/img/avatar5.png b/openerp/addons/base/static/src/img/avatar5.png new file mode 100644 index 0000000000000000000000000000000000000000..0f6c416ecf017631a4f95d2fe8eda439a6e41cf2 GIT binary patch literal 5374 zcma)A2UJsAvkoFAQbH(7z<_iRxCly#s31j}2#WMB9i$|5=}71h1Vp-AP%aXrUwRKs zE=@$5p#?-rfY1Zd-r>LNzOvqXYyB(htn4$hXU?2&?=$nwj(MW3#z4zK3j%={G}Kje zK_Du}^9ynTknBb6zXJZKJayHSK&69-72xJFO5NBK1fpX(zoFGz_R@I#5IjZA z1)&m2K8Yv9$S%3p6n?fdUAXx0YEUXSO=f=0 zZkUN)gkXuLQ<%!dZ@)|Z^~g|);rBP&dSZ$X1=vPEUNFA*FzE>vT$Iih6vpjiErbp7 zZHWrX&dC6N>=yA=GaETUvP;vGIT_?7{Vb6La%&p-^mIqKzEl*{#+V@hdVmDMpdbu2 zhMS-{xAP5+Qrviq5%l=XSE&Dgs|LO5>>wi3QBhqN{I-IUz942nBBjZ7qYDSG-IhNdxvNy|yx0)4xI**A*ZbYMzYm(^xoh`0QPb5`K(9T$p7ek$=6G>`_d=8Jy!>uZ3-d+jW z$m+6{&mFS8m7x_G2!mpr>Ne%aEXoRTt5vy@-M5SnynT9u&eXOGbZ?|;Ugo)Ug%9v@ z+mN9L?LshMT^vbdFUzTQAP)Kb%s!ZMH}t5_7VDc)J$Kdr*Bc^IyKJ1~CCBJ>RCQPw zRGfSxt*=PW`E_DD{{?*54Mf)y{pyjGizvv#OtZ0;fk>*0OyAE4l$CRMo(P#H<){wMBiP370F+<}EIDmLi<_R5%O-)a5dLn!Z@(}Q` zeuww8>U;E`MLkR45C?I~;!*YP{&~0>1oyOT+(w^)r!y&X%u%YzUAlz;0S6k|czW&_ z6|;3*L4N;sEg=&2s-ply-Qtk2;L2A+Lj76f?&h|A^Z;2d8vZ_SD_c5}^TnQwj0{{3 z0`}pO#lT|o5l)VuB4P7>1jlNVKf_U0QI9pt#!by$RB=#KTz&NQ3pg>l#r-K4yEYPQGEj&Q^Oe}PehbAH=@oJ^B6uFuB-yR z*JPC_@!LfKzY}W3;-+bd(KiS+XQWwn+5LH))`me|t@XQ!&)pjurZ?KNej9u4ZosIg zS-`Aw*=9a^x($EM0Et%lm|PC=MJSX3Sy1co&n$*#a6(l4!eP{qRG$9#uvXQpzjnl zzO}o&VZnolzqVO0vLfLHC=;(KMYC|G6u{pL1&{5%+v@nj^rcLaj&rk)M5lUg+R`bzobz8G%y#@ITg~GIPZJkWUZ|z1)ODdo#U+(#Hr)pL}wGdAUg%F;G zY4JyrJdw{KP)`_EedC#1DGaMIES1pL22s11@yAP%jA!Q4C*sFZLlf;;DKh3}3T;GZ5MCd~xpX?2oHQF$-`t)X|%WML7~I zet)Y=<(1ZLG$z-{<9ZOvznLrU0TS5w#9vSGOf)sF?xj1NpF0(i<#%Uz_LoVd6bHi@l2xF1=J^T zzicBO1o3BsTTq7;=Y^j+XFp+FLGYA2d)y zz`Se2BWo;|!OGykUq5NMT7l?EySM)gcV>Ye>~@Yc>A1*!U6BIN#;+2uF9lhTBxwoK zFv{p-1vVb9A7I2`|7&n6Fbb4`qxah>=92fF^0AWR> zgfSa~8!In@hp}f;U=VW2byi6gCH@wLkwYW~MYD)1?r7UfZZKhCQQ?o^;XNr&0Qf@P zvuT77PaVN=Fp1Jr!1gC+wv7vPB0|)SH)-y(FcCue1cYQcR0(fC9H!W_??TiL42|F3 z>1X=j@>ZJ#t3GFB{<^N>HEOe%einI46R9+GS0zom@THHNgg8ejzXpO`09bL({1m&x zN0#eV98^Zg*DU8kCSynAedwOe*Vryz0DyeHw7v=mmAYWc`Kr@iin?PItI>$+D&WBI z@m@*`Lx-GvIQgNI=0^`EMvs~FZ67HlJ8%k$WDR&|Mxaz&Yw=eSsJ#d{I?!h1G18hRN!?89z`WJau+PcOg%7diap0Kn zuud(TAc&~w7^tKy?|o7)9C6WwsKu)%ztIw$E%liEI`gt8X5s@3J5e3JQyJjn(>t)V z6Mt>waMW(Pu&dFe7oEMgw+C)$^608fpsX#lZ)qXW2%zXxilu1^7<81445?4Lye+#A zBu+-ov{Uy(y~u(9FX+LU(mBmgExN7P1A{LFpqL0wm9W5Fd!oy+4+(U zLkct1H!r#4naFt^jl-wmxpR?m=64!@`1hzx+Oa@o#PZF=7513pDyn)EOg6h2_HT?F z7YGn;S3XbTFB*0{FMQq8ql`CEUB9t_-55Eid@A1GUQ)T0VVesSw}9o>c8C3U4CdW} z565q>J)6K;dDZ3%|21!tHCmUlr|j7@92-OZzA@Fh;K@x5CE#aCh z*G2_B!LK;k*vQC=GaV_>V9KQQ&H3K6L%>YdvjZF-V#2-_9~ZH~1%<{jLtQ9IpSKGT zXKwKg*=fzb+@UC|tm#;OjVZ_0RNsm8AX;J@r?03Pd;Jyi8$rZ`qDbnz{p52t2H7Na z3Ag?)vWV;5^cw~k*q;B1QCwAJ?I*5}Z!`rg82UQHIDJITuHWgu+omWDlzhi1-xz)j z%waHzzD8t%vj=TpU{HtAgH-&Bfvi1CN0t}og&!H*TlB~{f2vzYyTAvfXkejcMy?ps z;=?%o&ff7e$EfM_oFp}c9JtPe0o;Ow?x5?jJoTJX;2sobf*u^Z*k(+}Qht8`gC0zj zbRK_LixAD$;6ZG*nrak|pj-BjdxAxJlAhwjn%4}tUfyfTO_D`PdI7U%$~S}P{zZxb z0{riD=Kn#d!!(llV`^go3=J=lb@MpVA2$vAUM(i>;n9ePPqkOKf_PY_ZRgwEzzk&9 zA^9=i?>5jG`Mr0rYPU&bO%)eD~;%Q*f|+N-upGb2<`5 zB7Lj;w79tVmuaz{&4kAEv~SQt{mrQ_QVFu-x6u-oQ<-g?Jr!av0BT0$qN@s5(-CUf zG2zJ_5@L>NUv7shA+05i>63@a6mRphs8-jIQ>I|@Nxebe71{_bL1lS}nwTm*4@TBn zIClHTkTF1qjkE6uynij6s#$L)o}~Vo5zn+}yWBA2R(t&`!oc2aP`qB@Y)d!qiF$$V zk8qRr!~Bo$qVE+BKXms$qI z`i)GWQR>XW>~6OaWnMnQHzIsZsPh#c>Z;4 zlFpyAWM8?Qki)yF4y$uBl$*2u0>?oJ-VzV zzq{wg=^-y&Pks(x_sJ3pvTis^gD9LxO%dVs2xZ7HX>WB;u93O_+i8KGNR01I>3CH& zJO{SK5VbWS-(OijJ{|pW2OeNE)e;dAGC+J$09aFYzuGrFDAVyt;E3D3@bD4>!G~HKND5Sg_=+O0QxX z%@r!=Nrb=b7cvawbvu8Cy!ppb=c?>PcG{lJ3)O^mos;5Lc_+Ztj|@{8}Usl&T>S!hHC3}CqF!X-3aBN=+(Tir z!aDB>oa+Ja6>JIP+K5yFps?9e<#{T0wfQ%#*CRa_E#>YXZ&R6%%gV^KY^9ENRm+Tm zx)&8kEzDk=eeW3?A0L-~%%X7IkXWvbz%EE-4Y;4h488z|g8Y2j^@>N^rPo+86}#E7 zLGvB4l{Lroz}NG3emjOn~A(9809mt#K8N#hXrtvHJ#D=9!82Rf=hR zyv8Wz(dQcQ;Rko!Phg;ozsNen=F{3bAvu;q_HFFV?Q!A1I ze3I=)mao#0P0sMhirrP(Q4oIFk6`5Q-6au!pON!a5L(93Y~g;|Em+Kmnf{emA1L1% zwZJKlSCkH2HopG^I8g{DR1iu4LtZCzNr`Z*Z>dc`@pp~~e-iRY4P`!`?+PkIfcDDH zSdTgy7qQsz9Nws))~JlUl;+p`@=!32PGy2E1U*tICb^3xG^P^8y|;XXOG$1(8;y9v zy)C}97!GFqtFmdKLic44TKOp}j;ga=IdjCh`Vvcr1)g}~+H67o;vYprV?D2~d@Y#! zH5sLz`~x|d8XVUZ? zK)m;ImeVu;n6|6sb#K&QQVKi{VtC6KT>_*+^wJBtnpvC_2Lsm`xO0jyx^{egJP70z zno>RLwhDtGsR7p|=u48Iows+Y05vzJZo50vFfz&KGv5M`Et?M6LznbaSA80N2{^w6 z)v8I`3J|^7ftx3(`a|t$97SQdp{3l+p#Vg`!?j;E&`C5G`tDq9#0TPYYa03f6COoL z6YKMTQf&-KwCz4vlnF&@mwld}R{kS4zx)BHX4I`Vs_a2)wf+j_Xec-`V2R3w9OgC~ z(4VO0VLt9X?N-}ZH)ih*n(EyPiZChh37EIayMw6wQ{)hXDEPSKoYrU4ZcL_f_KDcUGxEjbD+K z3OU++InW{AOXa4q`9Omd@=H>D7F2F}^L`l}&j>NONyg{2v8v4`M(a*&WHbWWPcNq|8_L@zeox&^Z!-D=*}1)rTe|dev1+Sjw?YL M54BZFm8@R<2b>c9f&c&j literal 0 HcmV?d00001 diff --git a/openerp/addons/base/static/src/img/avatar6.png b/openerp/addons/base/static/src/img/avatar6.png new file mode 100644 index 0000000000000000000000000000000000000000..d6a18c2779e4bf8b582183a483a22e612f5d87c1 GIT binary patch literal 5452 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 literal 0 HcmV?d00001 From 49d8f42586feb41f8c8205177cbd83320122b199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 30 Mar 2012 10:34:20 +0200 Subject: [PATCH 30/30] [IMP] Typo in comment bzr revid: tde@openerp.com-20120330083420-5swr4h9ihayi7vpu --- openerp/addons/base/res/res_users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index fbd4848439a..6d567e6d4b8 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -390,7 +390,7 @@ class users(osv.osv): return result def _get_avatar(self, cr, uid, context=None): - # default avatar file name: avatar0 -> avatar6.jpg, choose randomly + # default avatar file name: avatar0 -> avatar6.png, choose randomly avatar_path = openerp.modules.get_module_resource('base', 'static/src/img', 'avatar%d.png' % random.randint(0, 6)) return self._avatar_resize(cr, uid, open(avatar_path, 'rb').read().encode('base64'), context=context)