source: products/quintagroup.plonecomments/brunches/wald/quintagroup/plonecomments/browser/comments.py @ 1388

Last change on this file since 1388 was 1388, checked in by wald, 14 years ago

fixed gravatar logic

File size: 7.1 KB
Line 
1import urllib, md5
2
3from Acquisition import aq_inner
4from AccessControl import getSecurityManager
5
6from Products.CMFPlone.utils import IndexIterator
7from Products.CMFPlone.utils import getToolByName
8from Products.CMFFormController.ControllerState import ControllerState
9from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
10from quintagroup.plonecomments.utils import manage_mails
11
12from plone.app.layout.viewlets import comments
13from plone.app.kss.plonekssview import PloneKSSView
14
15class CommentsViewlet(comments.CommentsViewlet):
16    """A custom version of the comments viewlet
17    """
18    render = ViewPageTemplateFile('comments.pt')
19
20    def is_moderation_enabled(self):
21        """ Returns a boolean indicating whether the user has enabled moderation
22            in the qPloneComments configlet
23        """
24        portal_properties = getToolByName(self.context, 'portal_properties')
25        try:
26            return portal_properties.qPloneComments.getProperty('enable_moderation', None)
27        except AttributeError:
28            return False
29
30    def can_moderate(self):
31        """ Returns a boolean indicating whether the user has the 'Moderate Discussion'
32            permission
33        """
34        return getSecurityManager().checkPermission('Moderate Discussion', aq_inner(self.context))
35
36    def getGravatar(self, reply):
37        purl = getToolByName(self.context, 'portal_url')
38        mtool = getToolByName(self.context, 'portal_membership')           
39        default = purl() + '/defaultUser.gif' 
40        email = ''
41
42        creator = reply.Creator()
43        if creator and not creator=='Anonymous User':
44            mtool = getToolByName(self.context, "portal_membership")
45            member = mtool.getMemberById(creator)
46            #portrait = mtool.getPersonalPortrait(member.getId())
47            #portrait_url =  portrait.absolute_url()
48            email = member and member.getProperty('email','') or ''
49        else:
50            email = reply.getProperty('email',d='')
51        if not email:
52            return default
53
54        try:
55            memberId = member.getId()
56            portrait = mtool.getPersonalPortrait(member.getId())
57            portrait_url =  portrait.absolute_url()
58        except:
59            memberId = 'Anonimous User'
60                   
61
62        murl = '/portal_memberdata/portraits/'
63        murl = purl() + murl + memberId
64       
65        if portrait_url == murl:
66            return portrait_url             
67        else: 
68            size = 40
69            gravatar_url = "http://www.gravatar.com/avatar.php?"
70            # construct the url
71            gravatar_url += urllib.urlencode({'gravatar_id':md5.md5(email).hexdigest(),
72                'default':default, 'size':str(size)})
73            return gravatar_url
74       
75
76    def authenticated_report_abuse_enabled(self):
77        """ """
78        portal_properties = getToolByName(self.context, 'portal_properties')
79        prop_sheet = portal_properties['qPloneComments']
80        value =  prop_sheet.getProperty('enable_authenticated_report_abuse', False)
81        return value
82
83    def anonymous_report_abuse_enabled(self):
84        """ """
85        portal_properties = getToolByName(self.context, 'portal_properties')
86        prop_sheet = portal_properties['qPloneComments']
87        value =  prop_sheet.getProperty('enable_anonymous_report_abuse', False)
88        return value
89
90    def ajax_report_abuse_enabled(self):
91        """ """
92        portal_properties = getToolByName(self.context, 'portal_properties')
93        prop_sheet = portal_properties['qPloneComments']
94        value =  prop_sheet.getProperty('enable_ajax_report_abuse', False)
95        return value
96
97    def email_from_address(self):
98        """ """
99        portal_url = getToolByName(self.context, 'portal_url')
100        portal = portal_url.getPortalObject()
101        return portal.email_from_address
102
103    def member(self):
104        """ """
105        pm = getToolByName(self.context, 'portal_membership')
106        return pm.getAuthenticatedMember()
107
108    def tabindex(self):
109        """ Needed for BBB, tabindex has been deprecated.
110        """
111        return IndexIterator()
112
113    def portal_url(self):
114        """ """
115        return getToolByName(self.context, 'portal_url')
116
117
118
119class CommentsKSS(PloneKSSView):
120    """ Operations on the report abuse form using KSS.
121    """   
122
123    def submit_abuse_report(self):
124        """ Send an email with the abuse report message and hide abuse report form.
125        """
126        errors = {}
127        context = aq_inner(self.context)
128        request = context.REQUEST
129        portal = getToolByName(self.context, 'portal_url').getPortalObject()
130        if hasattr(context, 'captcha_validator'):
131            dummy_controller_state = ControllerState(
132                                            id='comments.pt',
133                                            context=context,
134                                            button='submit',
135                                            status='success',
136                                            errors={},
137                                            next_action=None,)
138            # get the form controller
139            controller = portal.portal_form_controller
140            # send the validate script to the form controller with the dummy state object
141            controller_state = controller.validate(dummy_controller_state, request, ['captcha_validator',])
142            errors.update(controller_state.errors)
143
144        message = request.get('message')
145        if not message:
146            errors.update({'message': 'Please provide a message'})
147
148        mtool = getToolByName(self.context, "portal_membership")
149        member = mtool.getAuthenticatedMember()
150        comment_id = self.context.request.get('comment_id')
151        ksscore = self.getCommandSet('core')
152        if errors:
153            html = self.macroContent('context/report_abuse_form/macros/form',
154                                     errors=errors,
155                                     show_form=True,
156                                     tabindex=IndexIterator(),
157                                     member=member,
158                                     **request.form)
159            node = ksscore.getHtmlIdSelector('span-reply-form-holder-%s' % comment_id)
160            ksscore.replaceInnerHTML(node,  html)
161            return self.render()
162
163        # report_abuse(context, context, message, comment)
164        manage_mails(context, self.context, 'report_abuse')
165
166        html = self.macroContent('context/report_abuse_form/macros/form',
167                                 tabindex=IndexIterator(),
168                                 member=member,
169                                 **request.form)
170        node = ksscore.getHtmlIdSelector('span-reply-form-holder-%s' % comment_id)
171        html = '<br/><span style="color:red">You have reported this comment for abuse.</span>'
172        self.commands.addCommand('remove_abuse_report_form', 
173                                 node, 
174                                 comment_id=comment_id, 
175                                 html=html)
176
177        node = ksscore.getHtmlIdSelector('div-captcha-%s' % comment_id)
178        html = self.macroContent('context/report_abuse_form/macros/captcha',
179                                 **request.form)
180        ksscore.replaceInnerHTML(node,  html)
181        return self.render()
Note: See TracBrowser for help on using the repository browser.