source: products/quintagroup.plonecomments/trunk/quintagroup/plonecomments/browser/comments.py @ 1560

Last change on this file since 1560 was 1560, checked in by mylan, 11 years ago

Update commentor's photo logic - 1st - get member's photo if no - from gravatar service, if no - return default plone member photo

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