source: products/qPloneComments/branches/jcbrand-abuseFeature/browser/comments.py @ 1355

Last change on this file since 1355 was 1355, checked in by jcbrand, 15 years ago

Use local portrait before gravatr

  • Property svn:eol-style set to native
File size: 6.8 KB
Line 
1import urllib, md5 #hashlib
2
3from Acquisition import aq_inner
4from AccessControl import getSecurityManager
5
6from Products.CMFPlone.MembershipTool import default_portrait
7from Products.CMFPlone.utils import IndexIterator
8from Products.CMFPlone.utils import getToolByName
9from Products.CMFFormController.ControllerState import ControllerState
10from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
11from Products.qPloneComments.utils import manage_mails
12
13from plone.app.layout.viewlets import comments
14from plone.app.kss.plonekssview import PloneKSSView
15
16class CommentsViewlet(comments.CommentsViewlet):
17    """A custom version of the comments viewlet
18    """
19    render = ViewPageTemplateFile('comments.pt')
20
21    def is_moderation_enabled(self):
22        """ Returns a boolean indicating whether the user has enabled moderation
23            in the qPloneComments configlet
24        """
25        portal_properties = getToolByName(self.context, 'portal_properties')
26        try:
27            return portal_properties.qPloneComments.getProperty('enable_moderation', None)
28        except AttributeError:
29            return False
30
31    def can_moderate(self):
32        """ Returns a boolean indicating whether the user has the 'Moderate Discussion'
33            permission
34        """
35        return getSecurityManager().checkPermission('Moderate Discussion', aq_inner(self.context))
36
37    def getGravatar(self, reply):
38        purl = getToolByName(self.context, 'portal_url')
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            email = member and member.getProperty('email','') or ''
47            portrait = mtool.getPersonalPortrait(creator)
48            if portrait.getId() != default_portrait:
49                return portrait.absolute_url()
50        else:
51            email = reply.getProperty('email',d='')
52        if not email:
53            return default
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':default, 'size':str(size)})
60
61        return gravatar_url
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()
169
Note: See TracBrowser for help on using the repository browser.