source: products/quintagroup.plonecomments/branches/wald/quintagroup/plonecomments/browser/comments.py @ 1425

Last change on this file since 1425 was 1425, checked in by mylan, 14 years ago

Refactored gravatar portrait logic for comments, posted by authenticated

File size: 6.8 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        portrait_url = 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            email = member and member.getProperty('email','') or ''
47            portrait = mtool.getPersonalPortrait(memberId)
48            portrait_url =  portrait.absolute_url()
49        else:
50            email = reply.getProperty('email',d='')
51
52        if not email:
53            return portrait_url
54
55        size = 40
56        gravatar_url = "http://www.gravatar.com/avatar.php?"
57        # construct the url
58        gravatar_url += urllib.urlencode({'gravatar_id':md5.md5(email).hexdigest(),
59            'default':portrait_url, 'size':str(size)})
60        return gravatar_url
61       
62
63    def authenticated_report_abuse_enabled(self):
64        """ """
65        portal_properties = getToolByName(self.context, 'portal_properties')
66        prop_sheet = portal_properties['qPloneComments']
67        value =  prop_sheet.getProperty('enable_authenticated_report_abuse', False)
68        return value
69
70    def anonymous_report_abuse_enabled(self):
71        """ """
72        portal_properties = getToolByName(self.context, 'portal_properties')
73        prop_sheet = portal_properties['qPloneComments']
74        value =  prop_sheet.getProperty('enable_anonymous_report_abuse', False)
75        return value
76
77    def ajax_report_abuse_enabled(self):
78        """ """
79        portal_properties = getToolByName(self.context, 'portal_properties')
80        prop_sheet = portal_properties['qPloneComments']
81        value =  prop_sheet.getProperty('enable_ajax_report_abuse', False)
82        return value
83
84    def email_from_address(self):
85        """ """
86        portal_url = getToolByName(self.context, 'portal_url')
87        portal = portal_url.getPortalObject()
88        return portal.email_from_address
89
90    def member(self):
91        """ """
92        pm = getToolByName(self.context, 'portal_membership')
93        return pm.getAuthenticatedMember()
94
95    def tabindex(self):
96        """ Needed for BBB, tabindex has been deprecated.
97        """
98        return IndexIterator()
99
100    def portal_url(self):
101        """ """
102        return getToolByName(self.context, 'portal_url')
103
104
105
106class CommentsKSS(PloneKSSView):
107    """ Operations on the report abuse form using KSS.
108    """   
109
110    def submit_abuse_report(self):
111        """ Send an email with the abuse report message and hide abuse report form.
112        """
113        errors = {}
114        context = aq_inner(self.context)
115        request = context.REQUEST
116        portal = getToolByName(self.context, 'portal_url').getPortalObject()
117        if hasattr(context, 'captcha_validator'):
118            dummy_controller_state = ControllerState(
119                                            id='comments.pt',
120                                            context=context,
121                                            button='submit',
122                                            status='success',
123                                            errors={},
124                                            next_action=None,)
125            # get the form controller
126            controller = portal.portal_form_controller
127            # send the validate script to the form controller with the dummy state object
128            controller_state = controller.validate(dummy_controller_state, request, ['captcha_validator',])
129            errors.update(controller_state.errors)
130
131        message = request.get('message')
132        if not message:
133            errors.update({'message': 'Please provide a message'})
134
135        mtool = getToolByName(self.context, "portal_membership")
136        member = mtool.getAuthenticatedMember()
137        comment_id = self.context.request.get('comment_id')
138        ksscore = self.getCommandSet('core')
139        if errors:
140            html = self.macroContent('context/report_abuse_form/macros/form',
141                                     errors=errors,
142                                     show_form=True,
143                                     tabindex=IndexIterator(),
144                                     member=member,
145                                     **request.form)
146            node = ksscore.getHtmlIdSelector('span-reply-form-holder-%s' % comment_id)
147            ksscore.replaceInnerHTML(node,  html)
148            return self.render()
149
150        # report_abuse(context, context, message, comment)
151        manage_mails(context, self.context, 'report_abuse')
152
153        html = self.macroContent('context/report_abuse_form/macros/form',
154                                 tabindex=IndexIterator(),
155                                 member=member,
156                                 **request.form)
157        node = ksscore.getHtmlIdSelector('span-reply-form-holder-%s' % comment_id)
158        html = '<br/><span style="color:red">You have reported this comment for abuse.</span>'
159        self.commands.addCommand('remove_abuse_report_form', 
160                                 node, 
161                                 comment_id=comment_id, 
162                                 html=html)
163
164        node = ksscore.getHtmlIdSelector('div-captcha-%s' % comment_id)
165        html = self.macroContent('context/report_abuse_form/macros/captcha',
166                                 **request.form)
167        ksscore.replaceInnerHTML(node,  html)
168        return self.render()
Note: See TracBrowser for help on using the repository browser.