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

Last change on this file since 3120 was 3120, checked in by kroman0, 13 years ago

Pyflakes and pep8 fixes #7

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