root/CMFPlone_membership_hotfix/trunk/patch_portraits.py

Revision 558 (checked in by chervol, 2 years ago)

patch.py divided

  • Property svn:eol-style set to native
Line 
1 from Products.CMFCore.CMFCorePermissions import SetOwnPassword
2 from Products.CMFCore.utils import getToolByName
3 from Products.CMFDefault.MembershipTool import MembershipTool as BaseTool
4 from Products.CMFPlone import ToolNames
5 from OFS.Image import Image
6 from AccessControl import ClassSecurityInfo, getSecurityManager
7 from Globals import InitializeClass
8 from Acquisition import aq_base, aq_parent, aq_inner
9 from Products.CMFCore.CMFCorePermissions import View
10 from Products.CMFPlone.PloneBaseTool import PloneBaseTool
11
12 from utils import scale_image
13 from Globals import InitializeClass, DTMLFile
14 from ZODB.POSException import ConflictError
15 from Products.CMFCore.utils import _checkPermission
16
17 from Products.CMFPlone.MembershipTool import MembershipTool
18    
19 def changeMemberPortrait(self, portrait, member_id=None):
20     """
21     given a portrait we will modify the users portrait
22     we put this method here because we do not want
23     .personal or portrait in the catalog
24     """
25     if not member_id:
26         member_id = self.getAuthenticatedMember().getUserName()
27
28     if portrait and portrait.filename:
29         scaled, mimetype = scale_image(portrait)
30         portrait = Image(id=member_id, file=scaled, title='')
31         membertool   = getToolByName(self, 'portal_memberdata')
32         membertool._setPortrait(portrait, member_id)
33
34
35
36 def getBadMembers(self):
37     """Will search for members with bad images in the portal_memberdata
38     delete their portraits and return their member ids"""
39     memberdata = getToolByName(self, 'portal_memberdata')
40     portraits = getattr(memberdata, 'portraits', None)
41     if portraits is None:
42         return []
43     bad_member_ids = []
44     TXN_THRESHOLD = 50
45     counter = 1
46     for member_id in tuple(portraits.objectIds()):
47         portrait = portraits[member_id]
48         portrait_data = str(portrait.data)
49         if portrait_data == '':
50             continue
51         try:
52             img = PIL.Image.open(StringIO(portrait_data))
53         except ConflictError:
54             pass
55         except:
56             # Anything else we have a bad bad image and we destroy it
57             # and ask questions later.
58             portraits._delObject(member_id)
59             bad_member_ids.append(member_id)
60         if not counter%TXN_THRESHOLD:               
61             get_transaction().commit()
62         counter = counter + 1
63
64     return bad_member_ids
65
66 MembershipTool.manage_options = (MembershipTool.manage_options +
67                       ( { 'label' : 'Portraits'
68                      , 'action' : 'manage_portrait_fix'
69                      },))
70 MembershipTool.security = ClassSecurityInfo()
71 MembershipTool.security.declareProtected('Manage Portal', 'manage_portrait_fix')
72 MembershipTool.manage_portrait_fix = DTMLFile('www/portrait_fix', globals())
73 MembershipTool.security.declareProtected('Manage Portal', 'getBadMembers')
74 MembershipTool.getBadMembers = getBadMembers
75
76 InitializeClass(MembershipTool)
Note: See TracBrowser for help on using the browser.